很多人以为自己装了很多插件,就算是会用VIM了,事实上,VIM最精髓的不在于众多插件,而是在于基本的操作。基本的操作玩的溜,才能算是VIM高手。基本操作不熟练,装再多插件都只是会花拳绣腿的初级装逼党。下面的技巧可以帮助你从vim的初级法师晋升为中级法师。
0x00 字符串简单替换
有时候觉得某个变量名字取得不是很好,或者发现笔误写错单词了,希望给某个变量修改名字,这时候可以使用全局替换命令。这里涉及到几个命令:”:s”是替换(substitute)命令,”:g”表示全局(global),”c”表示确认。
将本行的第一个abc替换(s)为efg:
:s/abc/efg/
将本行中所有(g)abc替换为efg:
:s/abc/efg/g
在替换之前确认(c),可以单个确认,也可以全局确认
:s/abc/efg/cg
将文件内所有行的所有abc替换为efg:
:%s/abc/efg/g 这里的%表示所有行 :1,$s/abc/efg/g
将文件内的第5行到10行的所有abc替换为efg:
:5,10s/abc/efg/g
替换不区分大小写(i):
:s/abc/efg/ig
替换区分大小写(I):
:s/abc/efg/Ig
在vim里面,还可以利用模式匹配来替换::g/pattern/s/old/new/g
,这里第一个g表示对文件所有行替换,第二个表示对某行中所有匹配项替换。这里:g/abc/s//efg/g
和之前的:%s/abc/efg/g
效果相同。这里的pattern用来识别需要替换的行,然后将该行中的old替换为new。
当然也可以使用正则表达式来匹配,都说了是中级技巧,就不详细说了。
0x01“:x”与”:wq”区别
:x和:wq差别不是特别大,都是保存并退出。唯一不同的是,当文件内容没有任何改变,:x保存退出不会改变文件的时间戳,而:wq不管文件是否改变都回修改文件时间戳。
0x02 格式化代码
==
,缩进当前行代码
gg=G
,整个文件缩进调整
={
,对代码块缩进
2G=10G
,从第二行到第10行缩进
0x03 交换字符
xp
,交换相邻两个字符
ddp
,交换相邻两行
0x04 完成重复工作
如果你想插入80行abc,你可以使用80iabc<CR><ESC>
完成工作。
当然你你可以使用 q<寄存器名a-z>iabc<CR><ESC>q
完成录制,然后执行80@<寄存器名>
,这里寄存器名字可以是a到z的任何一个字符(vim里面有不同类型寄存器,各个类型寄存器用途不同)。这里的寄存器如@a是可以直接赋值的:let @a=“oabc”
,因此如果熟悉的话,可以自己编写宏命令来完成。
0x05 文档查看
在单词上按大写K就可以查看该关键词的文档,这样要是不熟悉execl函数时可以直接按K查看manual。
0x06 查看二进制
:%!xxd
,用户查看文件二进制
不要尝试去编辑它,在vim里面编辑二进制需要谨慎。
0x07 vim中折叠
在查看代码的时候,将不重要或者已经看过的代码隐藏起来是个不错的。vim中有六种折叠方式:
- manual:vim定义的标准折叠
- indent:根据缩进折叠
- expr:根据正则表达式折叠
- syntax:根据语法折叠
- diff:以两个文件差异折叠
- marker:根据预定义标记折叠
折叠命令有以下:
zA 递归切换折叠状态
za 切换一个折叠的状态
zo 递归打开折叠
zC 递归关闭折叠
zc 关闭一个折叠
zD 递归删除折叠
zd 删除一个折叠
zE 删除所有折叠
zj,zk 跳转到上一个、下一个折叠
zf 创建折叠,从当前行开始到下一次光标移动位置,如”zf15G”表示折叠到15行。在syntax折叠方式下可能不会准确地折叠到15行,而是会根据语法折叠,manual方式下才可以。
zF 创建折叠,使用方法“countzF”,表示向后折叠count行。syntax方式下有差异。
对于代码来说,根据语法来折叠才是合适的,设置方法:
:set foldable
:set foldmethod=syntax
vim不是一朝一夕就能掌握的,需要在使用过程中慢慢摸索发现技巧,或者更直接地从参考书和文档中学习技巧。