1. 前言
Vim是Linux和Unix上的编辑器,由Vi升级而来。
已经使用了Vim好多年,但是,水平仅仅停留在修改配置文件的水平。不会把它当做主要的编辑器,更不会用它进行编码开发。最近,童钢老师提醒了我,作为运维人员,Vim需要用得更加熟练一些,最好能把Vim作为默认编辑器使用。
所以,本文决定研究一下更高阶的Vim使用技巧,主要参考优雅玩转Vim。
2. Vimrc
Vimrc指的是Vim的配置文件,rc=run command
,Vim 的全局配置一般在/etc/vim/vimrc
或者/etc/vimrc
,对所有用户生效。用户个人的配置在~/.vimrc
。
如果只对单次编辑启用某个配置项,可以在命令模式下,先输入一个冒号,再输入配置。举例来说,set number
这个配置可以写在.vimrc
里面,也可以在命令模式输入。
配置项一般都有”打开”和”关闭”两个设置。”关闭”就是在”打开”前面加上前缀”no”。
1 | " 打开 |
上面代码中,双引号开始的行表示注释。
查询某个配置项是打开还是关闭,可以在命令模式下,输入该配置,并在后面加上问号。
1 | :set number? |
上面的命令会返回number或者nonumber。
如果想查看帮助,可以使用help命令。
1 | :help number |
更多内容参考Vim 配置入门。
有一些大神把Vim配置得非常炫酷,比如amix和humiaozuzu。
附上一份常用的vim配置:
1 | " 语法高亮 |
如果cat查看文件可以正常看到中文,vim编辑文件出现乱码,那么可以指定编码方式为 utf8 来解决这个问题。
1 | " 解决中文乱码问题 |
设置显示换行等特殊字符。
1 | set list |
3. 四种模式
3.1. 普通模式
进入vim后默认普通模式,可以进行移动、复制、粘贴、删除、修改等。其他模式点击Esc
返回普通模式。
3.2. 可视模式
对一块区域进行操作,就像Windows中的鼠标选中。普通模式下点击v
进入可视模式。
3.3. 插入模式
插入模式和普通文本编辑器相同,可以进行输入和删除。普通模式下点击i
进入插入模式。
3.4. 命令模式
在命令模式中可以执行一些指令,就像在shell里一样。普通模式下点击Shift + :
进入命令模式。
4. 快捷键
4.1. 保存退出
Shift + zz,退出或者保存退出。
4.2. 移动跳转
为了减少右手移动距离,h可代替左,j可代替下,k可代替上,l可代替右。
0移动到行首,Shift + 6也是移动到行首(不包含空格)。Shift + 4移动到行尾。
w光标正向移动到下一个单词,3w正向移动3个单词,b反向移动。e正向移动到下一个单词词尾,ge反向移动。W(Shift+w)表示忽略特殊字符,比如逗号句号等。
gg跳回第一行,10gg跳到第10行,Shift+g跳到最后一行。g、Ctrl+g显示文件信息。
f、空格,跳到下一个空格。
Shift+>>右缩进,Shift+<<左缩进。
多行缩进,进入命令模式,输入:
1 | 75,80> |
4.3. 删除复制
yy复制一行,内容存入无名寄存器和0号寄存器。
准确地来说,Vim中没有删除,只有剪切。dd剪切一行,内容存入无名寄存器和1号寄存器。
p粘贴到光标下一行,P粘贴到光标前一行。
u撤销上一步的操作。
ctrl+r重做。
命令模式下输入reg
可以查看寄存器。
yw复制当前单词,y2w复制正向两个单词。yx复制当前字符。
dw删除当前单词,dj删除下一行,dk删除上一行,dh删除左边一个字符,dl删除当前字符。
d、Shift+6删除到行首,d、Shift+4删除到行尾。
3dd向下删除3行,5dw正向删除5个单词。
4.4. 修改查找
shift+i,跳到行首并进入插入模式;shift+a,跳到行尾并进入插入模式。
o进入下一行插入模式,O进入上一行插入模式。
3i进入插入模式,输入内容,Esc,输入的内容会被复制3次。
5o进入下一行插入模式,输入内容,Esc,输入的内容会插入5行。
~单个字符大小写转换,g~w整个单词大小写转换,g~$整行大小写转换,.对上一个操作重复。
fa在行内查找a,Fa在行内反向查找a。
/word查找word,n查找下一个,N查找上一个。在命令模式下设置set hlsearch
可以高亮显示。
进入命令模式,进行替换:
1 | # 替换当前行所有的oldword |
r替换单个字符,shift+r替换当前行,cw替换当前单词,c$修改光标后的内容。
5. 多文件编辑
假设有buffer1.txt、buffer2.txt、buffer3.txt三个文件,那么可以使用vim buffer*
打开三个文件。当前显示buffer1.txt,进入命令行模式,查看缓冲区列表:
1 | :files |
badd buffer4.txt
打开一个缓冲区,bn
切换下一个缓冲区,bp
切换上一个缓冲区,bf
切换到第一个缓冲区,bl
切换到最后一个缓冲区,b3
切换到第三个缓冲区,b buffer1.txt
切换到buffer1.txt,ball
编辑所有缓冲区,1,3bd
删除1-3缓冲区列表,%bd
删除所有缓冲区列表,qall
退出所有。
bufdo set number
所有缓冲区设置number。
6. 多窗口与标签分组
vim -o buffer*
,分屏打开多个文件,垂直方向分屏。vim -O buffer*
,分屏打开多个文件,竖直方向分屏。
ctrl+w、s垂直复制分屏,ctrl+w、v水平复制分屏,ctrl+w、q删除分屏。
sp buffer4.txt
打开buffer4.txt并且上下分屏,vsp buffer4.txt
打开buffer4.txt并且左右分屏。
ctrl+w、h向左移动,ctrl+w、j向下移动,ctrl+w、k向上移动,ctrl+w、l向右移动。
ctrl+w、+增加高度,ctrl+w、-减少高度,ctrl+w、=设置高度相等。
标签里面可以包含多个窗口,使用类似于buffers。
命令模式下,tabnew
创建标签,tabfind
查找并在新标签中打开文件,tabs
查看打开的标签列表,tabclose
关闭当前标签页,tabonly
只保留当前标签页,tabn/p/first/last
切换标签页,tabm 0
将标签页放到第一个位置。
普通模式下,gt/gT
切换标签页。
7. 文本对象和宏
文本对象:w代表word,s代表sentence,p代表paragraph,此外还有textblock块对象。
操作:
1 | {operator}{i}{object} |
viw选中单词,v3iw选中三个单词,vis选中句子,vip选中段落,vi(选中圆括号中的内容,vi[选中中括号中的内容,vit选中标签中的内容。
使用宏输入1到99:
普通模式下,o进入下一行插入,输入1,Esc返回普通模式,qa开始录制,yyp复制粘贴一行,ctrl+a当前数字加一,q完成录制,97@a执行97次。
8. Visual模式
在可视模式下,可以对一个文本块的整体进行操作。可视模式有三种子模式,v激活面向字符的可视模式,V激活面向行的可视模式,ctrl+v激活面向列块的可视模式。
gv重选刚才选择的选区,o在选择区两端跳动。
ctrl+v、3j垂直下拉三列,r进行替换。
ctrl+v、3j垂直下拉三列,e选择单词直到词尾,c进行单词替换,输入完成,Esc。
ctrl+v、3j垂直下拉三列,Shift+$选择到行尾,A进行插入,输入完成,Esc。
9. 后记
至此,已经系统学习了Vim的高阶知识点,包括Vim配置、四种模式、快捷键、多文本编辑、多窗口标签、文本对象和宏、可视模式等。接下来,就是在学习工作中多多使用Vim,最终熟能生巧。