本文将《Vim实用技巧》中涉及的部分命令记录下来(也有一些自己的补充),以备日后快速查找命令使用
- 技巧1
.
:重复上次的修改。在插入模式则是指从插入命令开始到Esc退出为止
- 技巧3、4
f{char}
:查找光标右边的指定字符;
:重复上次的查找,
:回退上次的查找F{char}
:查找光标左边的指定字符
- 技巧5
cw
:删除光标开始到下一个单词前的位置,并进入插入模式*
:查找光标所在单词下一次出现的位置,并使所有匹配项高亮#
:查找光标所在单词上一次出现的位置,并使所有匹配项高亮
- 技巧9
aw
:文本对象,代表一个单词ap
:文本对象,代表一段文字daw
:删除光标所在单词
- 技巧10
num<C-a>
:找到光标右边第一个数字,并加上num(Windows下可能会存在快捷键冲突,导致其他结果)num<C-x>
:找到光标右边第一个数字,并减去num
- 技巧12
dl
:删除光标所在字符g~{motion}
:反转大小写gu{motion}
:转换成小写gU{motion}
:转换成大写={motion}
:自动缩进c{motion}
:修改(删除并进入插入模式)gc{motion}
:注释(需安装commentary.vim插件)ae
:文件对象,代表全文(需安装textobj-entire插件)
- 技巧13(插入模式下使用)
<C-h>
:删除前一个字符(等同退格键)<C-w>
:删除前一个单词<C-u>
:删除至行首
- 技巧14(模式切换)
<Esc>
:切换到普通模式<C-[>
:切换到普通模式<C-o>
:切换到插入-普通模式(在插入模式按下,切换到普通模式,执行一条命令后回到插入模式)zz
:让光标所在行居中(小写z)ZZ
:保存并退出vim(大写Z)
- 技巧15、16(在插入模式下使用)
<C-r>{register}
:插入指定寄存器(面向字符的寄存器)中的内容,例如<C-r>0
<C-r><C-p>{register}
:按原义插入寄存器内的文本,并修正不必要的缩进<C-r>=表达式<CR>
:使用表达式寄存器计算表达式,并将结果插入文本中
- 技巧17、18(在插入模式下使用)
<C-v>{123}
:插入以十进制编码(3位数)的字符<C-v>u{1234}
:插入以十六进制编码(4位数)的字符<C-v>{nondigit}
:以原义插入非数字字符(u除外)<C-k>{char1}{char2}
:插入以二合字母{char1}{char2}
表示的字符
- 技巧19
R
:由普通模式进入替换模式(用其他字符替换tab字符时,tab字符的长度会被一个字符长度代替,导致该行字符长度变短,其他类似tab的字符同理)gR
:由普通模式进入虚拟替换模式(替换时遇到tab字符,保持该行原有长度,其他类似tab的字符同理)r{char}
:由普通模式进入替换模式,替换一个字符后回到普通模式gr{char}
:由普通模式进入虚拟替换模式,替换一个字符后回到普通模式
- 技巧20
<C-g>
:在可视模式和选择模式之间切换。如果处于选择模式,输入的字符会替换所选内容并切换到插入模式
- 技巧21(普通模式或可视模式下)
v
:激活面向字符的可视模式V
:激活面向行的可视模式<C-v>
:激活面向列块的可视模式gv
:重选上次的高亮选区o
:切换高亮选区的活动端(只在可视模式下)
- 技巧28
- 命令行模式下的位置标记
1
:文件的第一行$
:文件的最后一行0
:虚拟行,位于第一行上方.
:光标所在行'<
:高亮选区的起始行>'
:高亮选区的结束行%
:整个文件/str/
:匹配字符串str的行
:{start},{end}
:指定范围:/<html>/+1,/<\/html>/-1p
:调整指定的范围大小(其中p(print)代表打印操作)
- 命令行模式下的位置标记
- 技巧29
:[range]copy{address}
:把range范围的内容复制到address指定的行的下方,copy
可简写成co
或t
(copy to的含义):[range]move{address}
:把range范围的内容移动到address指定的行的下方,move
可简写成m
- 技巧30
:[range]normal 普通模式下的命令序列
:在指定范围内执行普通模式命令序列。例如::%normal A;
在所有行后面插入分号,:'<,>'normal .
对高亮选区的所有行,执行普通模式下的.
命令
- 技巧31
@:
:重复上次的Ex命令(Ex命令是指在命令行模式下执行的命令)
- 技巧32、33(命令行模式下)
<Tab>
:补全Ex命令,如果有多个候选项,可以连续按<Tab>
进行遍历或<S-Tab>
反向遍历,再或者<C-d>
查看候选补全列表<C-r><C-w>
:把光标下的单词插入命令行
- 技巧34
q/
:打开查找命令历史的命令行窗口q:
:打开Ex命令历史的命令行窗口<C-f>
:从命令行模式切换到命令行窗口
- 技巧35(命令行模式下)
:!{cmd}
:在shell中运行cmd命令:shell
:切换到一个交互的shell中,在shell中输入exit
命令可以返回vim:read !{cmd}
:在shell中执行cmd命令,并把其标准输出的内容插入到光标的下方:[range]write !{cmd}
:在shell中执行cmd命令,将缓冲区中指定范围的内容作为其标准输入。(如果没有给出范围,则就是指所有行):[range]!{filter}
:使用shell命令filter,过滤指定的范围的内容,即将指定范围的内容作为filter命令的输入,并用输出替换原来的内容。!{motion}
:会将指定范围预置在命令行中,后面还紧跟一个!
(普通模式下执行)
- 技巧36(命令行模式下)
:source vim脚本
:执行vim脚本,该脚本是一系列的Ex命令构成,每条命令一行,不需要前缀:
,脚本文件的扩展名为.vim。:args
:列出vim参数列表的内容:argdo {Ex命令}
:对参数列表的每个文件执行该Ex命令
- 技巧37
:ls
:查看缓冲区列表:buffers
:功能同上<C-^>
:在当前显示的缓冲区(用%标识)和轮换缓冲区(用#标识)之间切换(不按shift键也会切换):bprev
:反向遍历缓冲区列表:bnext
:正向遍历缓冲区列表:bfirst
:跳到缓冲区列表开头:blast
:跳到缓冲区列表结尾:buffer N
:直接跳到编号对应的缓冲区:bd[elete] N...
:删除指定编号对应的缓冲区:N,M bd[elete]
删除指定编号范围对应的缓冲区
- 技巧38
:args
:查看参数列表:args {arglist}
:用arglist的内容替换原有参数列表:next
:正向遍历参数列表:prev
:反向遍历参数列表
- 技巧39:
:w[rite]
:把缓冲区内容写回磁盘:e[dit]!
:把磁盘文件内容读入缓冲区,即回滚所做的修改:qa[ll]!
:关闭所有窗口,放弃修改而不发出警告:wa[ll]
:把所有改变的缓冲区写入磁盘
- 技巧40:
:sp[lit] {file}
:水平分割当前窗口,并在新窗口中载入file的内容:vsp[lit] {file}
:垂直分割当前窗口,并在新窗口中载入file的内容<C-w>s
:水平分割当前窗口,新窗口仍然显示当前缓冲区的内容<C-w>v
:垂直分割当前窗口,新窗口仍然显示当前缓冲区的内容<C-w>w
:在窗口之间循环切换<C-w>h
:切换到左边的窗口<C-w>j
:切换到下面的窗口<C-w>k
:切换到上面的窗口<C-w>l
:切换到右边的窗口:clo[se]
:关闭活动窗口:on[ly]
:只保留活动窗口,关闭其他所有窗口<C-w>c
:关闭活动窗口<C-w>o
:只保留活动窗口,关闭其他所有窗口<C-w>=
:让所有的窗口等高等宽<C-w>_
:最大化活动窗口的宽度<C-w>|
:最大化活动窗口的高度[N]<C-w>_
:把活动窗口的宽度设置为N列[N]<C-w>|
:把活动窗口的高度设置为N行
- 技巧41
:tabe[dit] {filename}
:在新标签页打开文件filename<C-w>T
:将活动窗口移动到一个新的标签页:tabc[lose]
:关闭当前标签页:tabo[nly]
:只保留当前标签页gt
:切换到下一个标签页gT
:切换到上一个标签页{N}gt
:切换到编号为N的标签页
- 技巧42
:pwd
:查看Vim的当前工作目录:edit 文件路径
:打开文件。文件路径可以是绝对路径,也可以是相对路径,相对路径是相对于Vim的当前工作目录而言- 命令行模式下的特殊符号
%<Tab>
:显示当前文件路径%:h<Tab>
:显示当前文件的目录路径,可借此打开相对于当前缓冲区文件的路径
- 技巧43
:find 文件名
:给出文件名就可以打开相应的文件,前提是配置好find搜索的路径:set path+=目录路径
:设置find的搜索目录
- 技巧44
:e[dit] 目录名称
:打开文件管理器,shell下输入vim 目录名称
也是这个效果:Explore
:打开文件管理器,并显示活动缓冲区所在的目录:Sexplore
:在一个水平分割的窗口打开文件管理器,并显示活动缓冲区所在的目录:Vexplore
:在一个垂直分割的窗口打开文件管理器,并显示活动缓冲区所在的目录
- 技巧45、46
:!mkdir -p %:h
:创建保存文件的路径(适合当前编辑的文件路径尚未创建的情况):w !sudo tee % > /dev/null
:以超级用户权限保存文件,Vim需要与我们进行两次交互(适合忘记用sudo vim
打开文件的情况)
- 技巧47、48(普通模式、可视模式和操作符待决模式)
h
:左移一列l
:右移一列j
:向下移动一个实际行gj
:向下移动一个屏幕行k
:向上移动一个实际行gk
:向上移动一个屏幕行0
:移动到实际行行首g0
:移动到屏幕行行首^
:移动到实际行第一个非空白字符g^
:移动到屏幕行第一个非空白字符$
:移动到实际行的行尾g$
:移动到屏幕行的行尾
- 技巧49(普通模式、可视模式和操作符待决模式)
w
:移动到下一个单词的开头ge
:移动到上一个单词的结尾b
:移动到当前单词/上一个单词的开头e
:移动到当前单词/下一个单词的结尾W
:移动到下一个字符串的开头gE
:移动到上一个字符串的结尾B
:移动到当前字符串/上一个字符串的开头E
:移动到当前字符串/下一个字符串的结尾
- 技巧50(普通模式、可视模式和操作符待决模式)
f{char}
:正向移动到下一个{char}所在之处F{char}
:反向移动到上一个{char}所在之处t{char}
:正向移动到下一个{char}所在之处的前一个字符上T{char}
:反向移动到上一个{char}所在之处的后一个字符上;
:重复执行上述字符查找命令,
:回退上述字符查找命令
- 技巧51(普通模式、可视模式和操作符待决模式)
/string
:查找字符串n
:查找下一个N
:回退(查找上一个)
- 技巧52(可视模式和操作符待决模式)
a)
:一对圆括号a}
:一对花括号a]
:一对中括号a>
:一对尖括号a'
:一对单引号a"
:一对双引号a`
:一对反引号at
:一对XML标签i)
:一对圆括号内部i}
:一对花括号内部i]
:一对中括号内部i>
:一对尖括号内部i'
:一对单引号内部i"
:一对双引号内部i`
:一对反引号内部it
:一对XML标签内部
- 技巧53(可视模式和操作符待决模式)
iw
:当前单词aw
:当前单词及一个空格iW
:当前字符串aW
:当前字符串及一个空格is
:当前句子as
:当前句子及一个空格ip
:当前段落ap
:当前段落及一个空行
- 技巧54
m{a-zA-Z}
:用选定的字符标记光标所在的位置(小写字符是缓冲区局部标记,大写字母是全局标记)'{mark}
:跳转到标记位置所在的行`{mark}
:跳转到标记位置``
:跳转到上次跳转动作的位置`.
:跳转到上次修改的位置`^
:跳转到上次插入的位置`[
:跳转到上次修改或复制的起始位置`]
:跳转到上次修改或复制的结束位置`<
:跳转到上次高亮选区的起始位置`>
:跳转到上次高亮选区的结束位置
- 技巧55
%
:匹配的括号间跳转(开启自带的matchit插件能够在匹配的标签间跳转和配对的关键字间跳转)- Surround.vim:为选中的文本加分隔符或者替换分隔符,例如,引号,括号,……
- 技巧102(Shell下执行)
sudo apt-get install exuberant-ctags
:安装ctagsctags filename..
:为指定的文件生成索引文件
- 技巧103
:set tags?
:查看Vim会在哪些目录(默认是当前文件所在目录和工作目录)下查找标签文件!ctags -R
:遍历当前目录及其所有子目录,并为其中的每个文件建立索引文件,并把这些索引文件保存在当前工作目录
- 技巧104
<C-]>
:跳转到匹配当前光标所在关键字的第一处标签g<C-]>
:当有多处匹配时,提示用户进行选择;当只有一处匹配时,直接进行跳转:tag {keyword}
:效果同<C-]>
:tjump {keyword}
:效果同g<C-]>
:pop
或<C-t>
:反向遍历标签历史,有回退的效果:tag
:正向遍历标签历史:tnext
:跳转到下一处匹配的标签:tprev
:跳转到上一处匹配的标签:tfirst
:跳转到第一处匹配的标签:tlast
:跳转到最后一处匹配的标签:tselect
:提示用户从匹配列表中选择一项进行跳转
- 技巧105、106、107
:make
:编译代码,Vim中编译的含义更加广泛:cnext
:跳转到Quickfix列表的下一项:cprev
:跳转到Quickfix列表的上一项:cfirst
:跳转到Quickfix列表的第一项:clast
:跳转到Quickfix列表的最后一项:cnfile
:跳转到Quickfix列表的下一个文件中的第一项:cpfile
:跳转到Quickfix列表的上一个文件中的最后一项:cc N
:跳转到Quickfix列表的第n项:copen
:打开Quickfix窗口:cclose
:关闭Quickfix窗口:cdo {cmd}
:在Quickfix列表的每一行上执行cmd:cfdo {cmd}
:在Quickfix列表的每个文件上执行cmd:colder
:查看之前的Quickfix列表:cnewer
:查看之后的Quickfix列表
- 技巧109、111(在当前工作目录下查找)
:grep [选项] POSIX正则表达式 file..
:在多个文件中进行查找,结果可用Quickfix列表查看:vim[grep] /[vim正则表达式]/[选项] file..
:在多个文件中进行查找,结果可用Quickfix列表查看。正则表达式可以省略,表示使用上次的查找命令。##
可代表参数列表中的所有文件。
- 技巧112、114-116、118、119
<C-n>
:普通关键字补全<C-x><C-n>
:当前缓冲区关键字补全<C-x><C-i>
:包含文件关键字补全<C-x><C-]>
:标签文件关键字补全<C-x><C-k>
:字典文件关键字补全<C-x><C-l>
:整行补全<C-x><C-f>
:文件名补全,只能补全相对于当前工作目录的进行扩展的文件<C-x><C-o>
:全能补全
- 技巧113
<C-n>
:使用来自补全列表的下一个匹配项(会改变文本中的文档)<C-p>
:使用来自补全列表的上一个匹配项(会改变文本中的文档)<Down>
:选择补全列表的下一个匹配项(不会改变文本中的文档)<Up>
:选择补全列表的下一个匹配项(不会改变文本中的文档)<C-y>
或<CR>
:确认使用选中的匹配项,与<Down>
和<Up>
搭配使用<C-e>
:退出补全,还原最早输入的文本{char}
:终止自动补全并插入字符char{补全命令}<C-p>
:根据输入情况实时显示补全列表
- 技巧117
<C-x><C-p>
:补全单词序列
- 技巧120
:set spell
:开启拼写检查]s
:跳到下一处拼写错误[s
:跳到上一处拼写错误z=
:为当前拼写错误提供更正意见zg
:把当前单词添加到拼写文件中zw
:把当前单词从拼写文件中删除zug
:撤销针对当前单词的zg
或zw
命令
- 技巧121、122
set spelllang={语言}
:设置进行拼写检查的语言set spellfile=file
:设置拼写检查使用的字典文件set spellfile+=file
:添加拼写检查使用的字典文件
- 技巧123(在开启拼写检查的情况下)
<C-x>s
:在插入模式下更正拼写错误(借助了自动补全列表)