目录:
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 打开指定文件进行编辑
|