VIM 使用技巧-vimgrep 和 g命令

分类:VIM |

1. vimgrep用法: 

:vimgrep /{pattern}/[g][j] {file} ...
简单来讲,就是在路径和文件命符合{file}的所有文件中,查找符合{pattern}的字符串.
(查找的结果可以用:copen命令打开quickfix列表查看).
没有参数g的话,则行只查找一次关键字.反之会查找所有的关键字.
没有参数j的话,查找后,VIM会跳转至第一个关键字所在的文件.反之,只更新结果列表(quickfix).
:vimgrep /the menu/ *.php
表示在当前目录下的扩展名为php的所有文件中,查找字符串"the menu".
:vimgrep /the menu/ ./includes/*.*
表示在当前目录中的"includes"目录里的所有文件中,查找字符串"the menu".
如果要在当前目录及其子目录中查找怎么办呢?也好办
:vimgrep /the menu/ **/*.*
用这句就可以了.
查找时{pattern}可用正则表达式,使用起来和'/'命令是一样的,就不多说了.
查找的结果可以用":copen"命令查看,在列表里,将光标移动至相应的位置,按回车就打开对应的文件了.
注:
    :copen    打开quickfix
    :cclose    关闭quickfix
    :cc    是在转到当前查找到的位置
    :cn    转到下一个位置
    :cp    转到前一个位置

2. 点  . 重复上次操作

3. :s5,6/^/#/g  替换 5到6行的首字为 #

4. g 命令

Task
删除一个文本文件中的所有带 ‘test’ 的行,以及这一行的前一行和后一行。 
如何用Vim实现?
Solution
:g/test/-,/test/+ d
上面的命令是如何工作的呢?这你就需要了解vim的global命令(g命令) 
:g就是global命令
语法:
:[range]g/pattern/cmd
:g/pattern1/, /pattern2/cmd
第一种语法会在range的范围内搜索pattern, 如果符合要求就执行cmd. 
第二种语法会在/p1/, /p2/之间执行cmd
例:
:g/test/d 
删除所有带test的行
:g!/test/d 
保留带test的行
:g/hello/, /world/d 
删除所有hello, world之间的行

        

5.