记录一些常用的 vim 命令
帮助文档
vimtutor
命令行直接运行,非vim编辑器内命令
:h
vim内部命令
过渡阶段
:set mouse=a
设置鼠标可区域选择,跟普通的编辑器一样可以进行拖选
基本操作
打开/切换文件
命令 |
功能 |
:e file_name 、:o file_name |
打开文件 |
:args file_name |
如果使用vim file1 file2 [filen] 命令打开多个文件,就可以使用:args file_name 命令在打开的文件之间切换 |
:buffers 、:ls 、:files |
查看缓冲区中的文件列表 |
:bnext |
切换到下一个缓冲区文件 |
:bprevious 、bpre |
切换到上一个缓冲区文件 |
:bfirst |
切换到第一个缓冲区文件 |
:blast |
切换到最后一个缓冲区文件 |
:bdelete file_name |
删除缓冲区文件 |
:badd file_name |
添加文件到缓冲区 |
<Ctrl> + z |
回到shell(最小化vim) |
fg (shell中命令) |
在shell中输入fg 即可回到最小化的vim中去 |
gf |
跳转到当前光标下文件名对应的文件 |
<Ctrl> + ^ |
跳转到上一个文件 |
退出/保存
命令 |
功能 |
:w |
保存 |
:w! |
强制保存,不退出vim |
:q |
退出 |
:q! |
强制退出不保存 |
:wq 、ZZ |
保存并退出 |
:wq! |
强制保存,并退出 |
:w file |
将修改另存到file中,不退出vim |
:e! |
放弃所有修改,从上次保存文件开始再编辑命令历史 |
编辑
命令 |
功能 |
i /I |
编辑 |
esc |
退出编辑模式 |
u |
撤销操作 |
<Ctrl> + r |
重做(恢复被撤销的动作) |
cc 、S |
清空当前行并进入编辑模式 |
s |
删除当前字符并进入编辑模式 |
r |
替换当前字符(替换后不进入编辑模式) |
R |
持续替换字符(不进入编辑模式),替换一个光标自动移到下一个 |
[<Shift> +] v |
可视化多选,<Shift> + v 的话是行选 |
<ctrl> + v |
可视化列选 |
. |
重复上次操作 |
set filetype? |
显示文件的filetype |
<Ctrl> + a |
加1 |
<crtl> + x |
减1 |
排版
命令 |
功能 |
=- |
格式化当前行代码 |
gg=G |
格式化所有代码 |
:ce |
居中 |
:le |
居左 |
:re |
局右 |
>> |
向右缩进 |
<< |
向左缩进 |
删除
命令 |
功能 |
x |
删除当前字符 |
X |
删除当前字符的前一个字符 |
dd |
删除当前行 |
D /n$ |
删除当前字符至行尾 |
d^ |
删除当前字符至行首 |
dG |
删除包含当前行及之后的全部行 |
cc |
清空当前行 |
C |
清空当前字符到行尾的字符 |
代码补全
命令 |
代码 |
<Ctrl> + p |
往前搜索补全 |
<Ctrl> + n |
往后搜索补全 |
<Ctrl> + e |
取消补全 |
<Ctrl> + y |
确定补全 |
移动
命令 |
功能 |
gg |
跳转到首行 |
G |
跳转到尾行 |
:n 、nG |
跳转到第n行 |
o |
在下一行插入 |
O |
在上一行插入 |
w 、W |
移动到下一个单词开头 |
b 、B |
移动到上一个单词开头 |
e 、E |
移动到下一个单词结尾 |
{ |
下一段落 |
} |
上一段落 |
M |
跳转到文件内容的中部 |
H |
跳转到文件内容的顶部 |
L |
跳转到文件内容的底部 |
<Ctrl> + f |
下一页 |
<Ctrl> + b |
上一页 |
'0 |
返回上一次操作的位置 |
<Ctrl> + o |
移动光标到上一个历史编辑位置 |
<Ctrl> + i 、tab |
移动光标到下一个历史编辑位置 |
gn |
移动到选中元素结尾 |
复制/粘贴
命令 |
功能 |
y |
复制 |
p |
粘贴到下部 |
P |
粘贴到上部 |
x 、X |
剪切 |
高端点的操作
骚操作
命令 |
功能 |
vim -d file1 file2 |
对比文件不同之处 |
拖动功能
命令 |
功能 |
zz |
将当前行定位到屏幕中间 |
zb |
将当前行定位到屏幕底部 |
zt |
将当前行定位到屏幕顶部 |
代码折叠
命令 |
功能 |
zf |
创建折叠 |
zo |
打开折叠 |
zc |
关闭折叠 |
:mkview / :loadview |
保存,载入折叠 |
窗口管理
命令 |
功能 |
:split [file_name] 、:sp [file_name] |
水平分割 |
:vsplit [file_name] 、:vs [file_name] |
垂直分割 |
<Ctrl> + w + h |
将焦点移动到左边窗口 |
<Ctrl> + w + j |
将焦点移动到下方窗口 |
<Ctrl> + w + k |
将焦点移动到上方窗口 |
<Ctrl> + w + l |
将焦点移动到右边窗口 |
更详细的教程:【vim】分割窗口、标签页与Quickfix窗口
Tab操作
命令 |
功能 |
:tabnew [++opt选项] [+cmd] 文件 |
创建指定文件的新tab |
:tabc |
关闭当前的tab |
:tabo |
关闭其他的所有tab |
:tabs |
查看所有打开的tab |
:tabp |
前一个tab |
:tabn |
后一个tab |
转换文件编码和格式
命令 |
功能 |
:set fileformat unix dos mas |
让换行符自由切换 |
:set fileencodings |
检测打开文档编码的顺序,一般设置为utf-8、cp936 |
:set fileencoding |
保存文档的编码,一般为utf-8 |
:set encoding |
vim本身界面的编码,一般和文档无关 |
搜索
命令 |
功能 |
f / F |
当前行搜索,til,正向 / 反向 |
t / T |
当前行搜索,until,正向 / 反向 |
; 、, |
重复当前行搜索 |
/ 、? |
当前文件搜索,向上搜索 / 向下搜索 |
:grep -r / :!grep -r |
跨文件搜索 |
n |
下一个匹配内容 |
N |
上一个匹配内容 |
替换指定字符
:s/target/replace[/g]
target
:要被替换的内容
replace
:替换的内容
- 可选
/g
:表示替换当前行所有的需要被替换的内容,如不加这个参数则替换当前行第一个需要被替换的内容
Example:
: s/a/b
,将当前行的a
替换为b
: s/a/b/g
,将当前行所有的a
替换为b
:n,$s/target/replace[/g]
n
为数字表示从第n行开始到最后一行,当n
为.
时表示从当前行开始
target
:要被替换的内容
replace
:替换的内容
- 可选
/g
:表示替换每一行所有需要被替换的内容,如不添加则替换每一行的第一个需要被替换的内容
Example:
: 2, $s/a/b
:替换从第2行开始到最后一行的每一行的第一个a
为b
: 2, $s/a/b/g
:替换从第2行开始到最后一行的每一行的所有a
为b
: ., $s/a/b
:替换从当前行开始到最后一行的每一行的第一个a
为b
插件使用(在安装的前提下)
NERDTree
命令 |
功能 |
o |
打开/关闭文件或目录 |
t |
在新标签页中打开 |
T |
在后台标签页打开 |
! |
执行此文件 |
p |
到上层目录 |
P |
到根目录 |
K |
到第一个节点 |
J |
到最后一个节点 |
u |
打开上层目录 |
m |
显示文件系统菜单(添加、删除、移动操作) |
? |
帮助,再按一下关闭 |
q |
关闭 |
r |
刷新列表 |
i |
水平分屏 |
s |
垂直分屏 |
快捷键 |
功能 |
gcc |
注释当前行(普通模式下) |
gc |
注释当前选中内容(可视多选模式下) |
gcap |
注释当前所在段落 |
gcu |
注释上一次注释的部分 |
gcgc |
取消一组相邻的注释 |
One more thing
参考文章
- vim-vide
- 【vim】分割窗口、标签页与Quickfix窗口
- vim 树形目录插件NERDTree安装及简单用法
- https://github.com/jaywcjlove/vim-web