且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

vim小技巧

更新时间:2022-08-22 08:06:32

vim中字符串出现次数的统计
在所有行中查找 字符串 出现的次数

:%s/字符串//gn
:%s/字符串/&/gn
在m和n行之间查找 字符串 出现的次数
:m,ns/字符串/&/gn

C-r (register) 在insert模式下插入寄存器对应的内容
在insert模式下,C-r (register) 插入register里的内容,一个有趣的reg是”=”. 假设你想输入123K的具体字节数,不用打开计算器,试试这个”=1024*123″,”125952″就出来了!

* 向下查找当前光标所在单词或字符串
g* 查找则不限制whole word。 区别:比如在if这个单词上按*键则查找单词if,按g*键则查找if。

# 向上查找当前光标所在单词或字符串
g# 查找则不限制whole word。 区别:比如在if这个单词上按#键则查找单词if,按g#键则查找if。

删掉偶数行
:g/^/+1 d 或 %norm jdd

C-o (fast out, fast in)
在insert模式下,用C-o后可以执行一个normal命令,然后立即返回insert模式,省去了用ESC的麻烦。

[I (fast grep )
[I 显示文件中包含光标下的所有行。我常用来浏览某个id在程序中的引用情况。 还有很多相关的命令::h include-search

删除文件中所有的空行
:g/^\s*$/d

去掉所有的行尾空格
:%s/\s\+$//

去掉所有的“//”开头的注释
:%s#\s*//.*##

去掉所有的“/* */”注释
:%s#\s*/\*\_.\{-}\*/\s*# #g
(这个略有点复杂了,用到了几个不太常用的 Vim 正则表达式特性。“\_.”匹配包含换行在内的所有字符;“\{-}”表示前一个字符可出现零次或多次,但在整个正则表达式可以匹配成功的前提下,匹配的字符数越少越好;标志“g”表示一行里可以匹配和替换多次。替换的结果是个空格的目的是保证像“int/* space not necessary around comments */main()”这样的表达式在替换之后仍然是合法)

精确匹配查找单词
如果你输入 “/the”,你也可能找到 “there”。要找到以 “the” 结尾的单词,可以用:
/the\> “\>” 是一个特殊的记号,表示只匹配单词末尾。类似地,”\<” 只匹配单词的开头。
这样,要匹配一个完整的单词 “the”,只需:/\<the\>

特殊的“寄存器”:”=”
在插入模式或命令模式中,键入“Ctrl-R=”,Vim 会提示你输入一个表达式,普通的整数运算在此完全有效。

单词的自动完成
Ctrl+p
比如,你前面使用了一个很长的变量名,叫 aLongVariable,下面你在输入时,就不用完整键入了。很可能,你只需要键入“aL”,然后按下“Ctrl-P”(向前搜索可匹配的单词并完成)就可以得到完整的变量名(没有得到想要的结果的话,多按几下“Ctrl-P”;或者前面多输入几个字符,如“aLongV”)。类似的命令还有“Ctrl-N”(向后搜索可匹配的单词并完成)、“Ctrl-X Ctrl-L”(搜索可匹配的行并完成)、“Ctrl-X Ctrl-F”(搜索可匹配的文件名并完成)等,具体可参看“:help ins-completion”。

Make 和 grep
Make 和grep 应当算是 Unix 世界里无人不晓的基本工具了吧。很自然的,Vim 对它们有着特殊的支持。该支持主要通过访问一个特殊的快速修订窗口(quickfix window)来实现。直接在 Vim 的命令模式里输入相应的 make 或 grep 命令(如“:grep foo *.c”)即可将命令的执行结果放入该窗口,同时根据返回的结果跳转到第一个错误(make 的情况;在使用 grep 时是匹配成功之处)。以下是常用的“快速修订”命令:

:cn(显示下一个错误)
:cp(显示上一个错误)
:cl(列出所有的错误及其编号)
:cc(跳转到指定编号的错误)
:copen(打开快速修订窗口,在其中显示所有错误,可在错误上双击鼠标或按回车键跳转至该错误

执行外部命令
:!命令

单词大小写转换
guw(光标下的单词变为小写)
gUw(光标下的单词变为大写)