本文适合vim编辑器爱好者阅读。
本文包括vim大部分实用操作,加深理解和记忆的方法。
绪论
首先使用vim需要摒弃一个不好的习惯就是需要输入大写字母非要切换非要用CapsLk
,其实shift+字母
就是大写。因为vim中有很多的快捷键是大写字母,如果使用前者的方式需要按三次键盘,而后者的方式只需要一次。
vim的使用致力于双手可以放在键盘上,不需要抬起来拿鼠标。
一、移动篇
上下左右:hjkl
。
移动到单词开头:b
。移动到上一个空格之后B
。B比b好用。
移动到单词结尾:e
。移动到下一个空格之前E
。E比e好用。
移动到下一个单词开头w
。移动到下一个空格后面W
。W比w好用。
行首(第一个可见字符):^
,行尾:$
,行的第一列0
。
翻页:ctrl+f
,ctrl+b
。
移动到n行::n
。
全文首:gg
,全文尾G
。
二、查找篇
全篇向下查找字符串string:/string
。在配合n
向下,N
向上查找。#
等价于/光标所在单词
。
全篇向上查找字符串string:?string
。在配合n
向上,N
向下查找。*
等价于/光标所在单词
。
跳转到本行下一个字符char:f char
。
跳转到本行上一个字符char:F char
。
跳转到本行下一个字符char之前:t char
。
跳转到本行上一个字符char之前:T char
。
三、插入篇
光标前插入:i
。
跳转到行首插入:I
,等价与^ i
。
光标后插入:a
。
跳转到行尾插入:A
,等价于$ a
。
下一行插入:o
,等价于A return
。
上一行插入:O
,等价于I return 上(esc k i)
。
列插入:ctrl+v 上下移动光标 I 要输入的内容 esc
。
四、删除篇
删除光标处字母:x
。删除光标前的字母:X
。
删除一个单词包括它后面的空格:daw
。删除一个单词不包括它后面的空格:diw
。
删除括号()或[]或{}
中且包含括号的内容:da(或[或{
。
删除括号()或[]或{}
中不包含括号的内容:di(或[或{
。
删除引号'或"
中且包含引号的内容:da'或"
。
删除引号'或"
中不包含引号的内容:di'或"
,
删除整行:dd
。删除n行:ndd
。
删除本行光标后的内容:D
。删除本行光标前的内容d 0
或d ^
。
删除到下一个空格包括空格:d W
。(没有特殊字符时小写也可以)
删除到下一个空格不包括空格:d E
。(没有特殊字符时小写也可以)
删除到上一个空格不包括空格:d B
。(没有特殊字符时小写也可以)
列删除:ctrl+v 移动光标选中待删除部分 d
。
五、替换篇
替换其实就是删除并插入。
删除当前字母并进入插入模式:s
,等价于x i
。
删除当前行并进入插入模式:S
,等价于dd O
。
删除篇d
所有的操作用c
来替代,相当于删除后直接进入插入模式,c
相当于dxx a
。
全文替换::%s/old string/new string/
。
n到m行替换::n,ms/old string/new string/
。
六、复制粘贴篇
复制一行:yy
或Y
。复制n行:nyy
。
删除篇d
所有操作用y
来代替,代表复制相应的内容。比如yaw
就是复制单词、yi"就是复制两个”之间的内容。
在光标之后粘贴:p
。在光标之前粘贴:P
。
其实p粘贴的内容是从vim无名寄存器中取出来的,删除操作和复制操作都会将内容存入无名寄存器,所以刚删除的内容是可以用p
粘贴出来的,d
和p
像是剪切和粘贴,y
和p
像是复制和粘贴。
字母大小写切换:~
。
七、块模式篇
块模式是用来选中需要操作的部分,具体执行什么操作还要看后面跟随的具体命令。
快速选中:用v
替换删除篇的d
,用来快速选中相对应的部分。
常见操作:yaw
复制一个单词,再移动光标到另一处单词,vawp
用复制的单词替换当前单词,vaw
代表快速选中单词,p再进行粘贴。将单词全部转化成大写viwU
,小写是viwu
。
普通块模式:ctrl+v
,进入块模式移动光标可以选中需要操作的部分。
常见操作:列插入列删除。
行模式:V
,通过上下移动选中多行。
常见操作:多行删除V 移动光标 d
和复制V 移动光标 y
,用ndd
或者nyy
需要数多少行,用V
可以所见即所得。
八、写代码篇
向前撤销:u
,向后撤销:ctrl+R
。
自动补全:ctrl+p
和ctrl+n
。
自动对齐n行:n==
。
向左缩进:<<
。向右缩进:>>
。
跳转到上一个{:[{
。
跳转到下一个}:]}
。
找到与之匹配的括号:%
。
跳转函数定义:ctrl+]
。跳回:ctrl+t
。
跳转光标上一次的位置:ctrl+o
。下一次:ctrl+i
。
自动补全ctrl+p
和ctrl+n
。
九、文件篇
保存::w
。
保存退出::wq
。
不保存退出::q
。
左右分割打开其他文件::vsp filename
。
上下分割打开其他文件::sp filename
。
两个文件差异比较:vimdiff filename1 filename2。
十、设置篇
显示行号::set nu
,不显示行号:set nonu
。
设置tab的宽度为n::set ts=n
。
设置缩进宽度为n::set sw=n
。
用空格替换tab::set expandtab
,反之::set noexpandtab
。
在行开始时使用制表符::set smarttab
。
查找忽略大小写::set ignorecase 。
从外面粘贴代码缩进会出现问题::set paste
。复制完成后在::set nopaste
。这一点粘贴python尤为重要。
可以在~/.vimrc
文件来提前配置vim。
十一、理解篇
一些操作,如:d/y/c
,像是一个及物动词(谓语)一样,后面可以跟它的宾语,如:w/(/'
,这些宾语可以有他们的定语,如:i/a
。这些都可以自由的组合。
一些操作,如:p/o
,像是一个不及物动词一样,i/a
也可以是不及物动词。
宾语(待操作的对象)也可以通过块模式选取。比如:列删除操作、vi(d
删除()之间的内容。
十二、升级篇
vim还有很多强大的功能,笔者目前用的不多。比如:做标记m
和标记跳转`,有名的寄存器操作"寄存器名
,录入命令集合q名字xxxq
,取出命令集合@名字
。
如果写c/c++可以将vim插件安装到clion中使用,写代码不要太爽。
linux中还可以安装ctags和escope插件,完善函数跳转。
最终附上我常用的vim配置文件 vim配置文件