目录:
1. 分屏
分屏操作使用Ctrl+w进行控制。
1.1 启动时分屏
通过-O(大写)指定垂直分屏,-o(小写)指定水平分屏。
1 2 3 4 5 | # 垂直分2屏幕,分别编辑file1和file2 vim -O2 file1 file2 # 水平分3屏幕,分别编辑file1、file2和file3 vim -o3 file1 file2 file3 |
1.2 关闭分屏
1 2 | <C-w> c 关闭当前分屏,当若当前已是最后一个分屏则不会退出 <C-w> q 关闭当前分屏,如果只剩最后一个了,则退出Vim |
1.3 编辑文件时增加分屏
1 2 3 4 | <C-w> s 水平分割当前打开的文件 :sp filename 水平分割窗口,并在新窗口打开一个新的文件。 <C-w> v 垂直分割当前打开的文件 :vsp filename 垂直分割窗口,并在新窗口打开一个新的文件。 |
1.4 在分屏间移动光标
Vim中的光标键是h, j, k, l,要在各个屏间切换,只需要先按一下Ctrl+w
1 2 3 4 5 | <C-w> h 光标左移 <C-w> l 光标右移 <C-w> k 光标上移 <C-w> j 光标下移 <C-w> w 光标移动到下一个分屏中 |
BTW:
移动屏幕本身也是
H, J, K, L四个键,但是移动光标是小写,移动窗体是大写。
1.5 调节屏幕尺寸
1 2 3 4 5 | <C-w> = 让所有窗口等大 <C-w> + 增加当前窗口高度 <C-w> - 减小当前窗口高度 <C-w> > 增加当前窗口宽度 <C-w> < 减小当前窗口宽度 |
1.6 分屏中打开目录
在编辑文件的时候,可以使用命令在新的分屏中浏览当前文件所在目录。
1 2 3 4 | :He 水平分屏,在下部窗口中浏览目录 :He! 水平分屏,在上部窗口中浏览目录 :Ve 垂直分屏,在左侧窗口中浏览目录 :Ve! 垂直分屏,在右侧窗口中浏览目录 |
1.7 分屏同步移动光标
要同步光标,注意应该先将要同步的分屏的光标移动到需要的位置,然后在多个分屏中分别执行命令:
1 2 | :set scb 设置同步移动 :set scb! 解开同步移动的配置 |
1.8 Tab分屏
1 2 | # 同时以tab的方式打开多个文件
vim -p file1 file2 file3
|
其他命令:
1 2 3 4 5 6 | :Te 打开新的Tab页
gt 跳转到下一个Tab页,注意没有分号
gT 跳转到上一个Tab页,注意没有分号
{n}gt或:tabm {n} 跳转到指定Tab页,注意没有分号,n是具体数字。
:tabs 浏览当前所有tab页的概况
:tabclose {n} 关闭Tab页,如果后面指定了数字,那就关闭指定页,如果没有就关闭当前页
|
BTW
关于切换tab页,gvim使用
Ctrl+PageDown和Ctrl+PageUp来进行切换如果你想把buffer中的文件全转成tab的话,你可以使用下面的命令:
:bufdo tab split
2. 缓冲区
用:E命令浏览目录时打开的文件都保存在缓冲区中。可以用以下命令查看缓冲区内容:

1 2 3 | :ls 查看缓冲区,其中标有`%a`的一行表示当前激活状态的缓冲区。`:ls`输出如上图。
:buffer {n} 切换到指定缓冲区继续编辑文件, n代表缓冲区编号,在ls命令中能看到
:buffer {filepath} 同上,但是通过文件名切换
|
还可以使用以下命令快速在缓冲区间切换:
1 2 3 4 | :bnext 移动到下一缓冲区,缩写为`:bn` :bprevious 移动到上一缓冲区,缩写为`:bp` :blast 移动到最后一个缓冲区文件,缩写为`:bl` :bfirst 移动到第一个缓冲区文件,缩写为`:bf` |
前面我们提到一个%a标识符,这个表示当前被激活的文件。相关的标记还有:
1 2 3 4 5 6 7 | – 非活动的缓冲区 a 当前被激活缓冲区 h 隐藏的缓冲区 % 当前的缓冲区 # 交换缓冲区 = 只读缓冲区 + 已经更改的缓冲区 |
3. 关键字补全
无插件的vim也支持关键字补全,补全文本的来源是当前所编辑的文件本身。
1 2 | <C-n> 自动提示并补全 <C-p> 光标回到默认补全之前的位置 |
另外还有Ctrl+x开头的补全快捷键:
1 2 3 4 5 6 | <C-x>和<C-D> 宏定义补齐 <C-x>和<C-]> 是Tag 补齐 <C-x>和<C-F> 是文件名 补齐 <C-x>和<C-I> 也是关键词补齐,但是关键后会有个文件名,告诉你这个关键词在哪个文件中 <C-x>和<C-V> 是表达式补齐 <C-x>和<C-L> 整个行补齐 |
4. 移动光标
移动光标是基本操作,可以和后面的编辑命令相组合而执行。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | h,j,k,l 左/下/上/右移动一个字符
0 数字零,到行头
$ 到本行行尾
% 匹配括号:() or [] or {}
^ 到本行第一个不是blank字符的位置
g_ 到本行最后一个不是blank字符的位置
w 移动到下一个单词开头,`W`: 移动到下一个单词(空白字符分隔)开头(word)
e 移动到下一个单词结尾,`E`: 移动到下一个单词(空白字符分隔)结尾(end)
b 移动到前一个单词
G 文件最后一行
gg 文件第一行,相当于`1G`或者`:1`
{n}G 或者 `:{n}`: 跳转到文件第n行
{n}e 往后移动n个单词
f{c} 行内正向移动到下一个字符C,可以用`;`和`,`移动到上一个位置和下一个位置
F{c} 行内反向移动到下一个字符C,可以用`;`和`,`移动到上一个位置和下一个位置
t{c} 行内正向移动到下一个字符C的前一个字符,所以反复用`T{c}`的光标位置是不变的
T{c} 行内反向移动到上一个字符C的后一个字符,所以反复用`T{c}`的光标位置是不变的
<C-e> 向上滚动一行
<C-y> 向下滚动一行
<C-u> 向上滚动半屏
<C-d> 向下滚动半屏
|
5. 单词或行编辑
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | r replace,替换当前字符。
gr 当前字符虚拟替换模式。该模式下的<Tab>字符会在输入第8个字符是才将<tab>替换掉。
R 替换模式,可以替换多个字符,直到按<Esc>退出。
gR 虚拟替换模式。该模式下的<Tab>字符会在输入第8个字符是才将<tab>替换掉。
x/X 小写x删除光标处字符,大写X删除光标前字符
i/I 小写i在光标前插入,大写I在行首插入
a/A 小写a在光标后插入,大写A在行尾插入
u undo
<C-u> 在输入模式下执行的撤销操作
<C-r> redo
d 删除命令,删除后会将内容复制到剪切板。相当于剪切命令。有以下组合:
dd 删除当前行,重复两次命令为删除当前行。
d0 删除到行首,同样`d$`表示删除到行尾(大写`D`也表示删除到行尾)
dw 删除光标后单词,`dW`: 剪切单词(空白字符分隔);同样还有`de`和`dE`
db 删除光标前单词,同样`dB`会删除光标前以空白字分隔符计算的单词
D 剪切到行尾,和`d$`相同
c 删除并改变状态的插入模式。其中删除部分和`d`命令相同。同样有`cc`,`cw`,`cE`等等组合
y 复制命令,有和`d`命令同样的组合
yy 复制行,相当于 `ddP`
nyy 复制n行
"+yy 复制1行到操作系统剪切板
"+nyy 复制n行到操作系统剪切板
p 光标后粘贴;`P`: 光标前粘贴
gU/gu 变大/小写。用法是:
guw 会使光标所在单词变小写
gU$ 会使光标到行尾所有字符变大写
gu3e 会使光标往后三个单词变成小写。
>>/<< >>向右缩进当前行,<<向左缩进当前行
2,8> 2-8行缩进,`4,6<`: 4-6行反缩进
v/V 进入选择模式,移动光标选择多行,然后执行`>`缩进一次,执行`2>`则会缩进两次
其中小写v为进入字符选择选择模式,大写V为行选择模式。可以按`o`切换高亮端。
<C-v> 进入列编辑模式选择需要编辑的列,例如选择后按A/I开始编辑,完成后按<esc>应用到所有列
|
6. 缩进
以下选项需在命令模式下使用,例如:set number表示显示行号。
1 2 3 4 5 6 7 8 9 10 | (no)ai (no)autoindent,自动缩进,即新行与当前行同等缩进
(no)ci (no)cindent,C语言风格的缩进
(no)si (no)smartindent,基于autoindent的一些改进风格
ts={n} tabstop,设置tab键长度,相当于n个空格
sts={n} softtabstop,开启et后,如果开启本参数,每次退格会删除n个空格
sw={n} shiftwidth,每层缩进的空格数
(no)et (no)expandtab,将tab字符展开为空格,开启后如果确实要输入tab,可以使用`<C-v><Tab>`
(no)sta (no)smarttab,开启后在行首按<Tab>将会sw个空格,否则加入t个空格
(no)paste 粘贴选项打开的时候,从剪切板粘贴过来的文本不会自动缩进,可以在粘贴完之后再关闭该选项
|
8. 折叠
代码的折叠,可以方便掌控程序的主要逻辑,也便于代码的阅读、查找。使用折叠,首先要设置折叠方式,即设置vim中fdm(foldmethod的缩写)的值,例如fdm设置为indent,即依据代码的缩进进行自动折叠。vim中有六种fdm可以设置,参考详细帮助: :help fold。常用的折叠打开、关闭操作如下:
1 2 3 4 5 6 7 8 | zc 折叠代码 zC 递归折叠代码 zo 取消折叠代码 zO 递归取消折叠代码 zM 折叠整个文件 zR 取消整个文件的折叠 :m,nfoldopen 折叠m,n行中的代码 :m,nfoldclose 取消m,n行代码的折叠 |
8. 环境变量和配置项
1 2 3 | :echo $VIMRUNTIME 查看vim环境变量$VIMRUNTIME的值 :set fileencodings? 查看fileencodings配置项的值 :set history=200 设置history配置项的值(该值默认为20) |
9. 其他
1 2 3 | :%!python -m json.tool json代码格式化 :w !sudo tee % > /dev/null 以root权限保存当前文件 :e path/to/file 打开指定文件进行编辑 |