概述
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之间的行
提取宏定义
有如下代码,现在要求提取出当TEST为Ture时,所定义的内容
#ifdef TEST
test1
test2
#else
no test
#endif
可以这样写g命令
:g/#ifdef TEST/+1, /#else|#endif/-1 t $
+1
代表取下一行,-1
代表取上一行, #else|#endif表示满足#else或者#endif这两个条件都可以。
用以上的命令可以成功了取得#ifdef TEST所包含的内容
但如果我们想要取不满足#ifdef TEST的内容怎么办呢,这个问题要比上面的问题复杂。我们不能直接去搜索#else, 因为它之前有可能是其它的#ifdef, 而不是#ifdef TEST,其次,不是所有的#ifdef TEST都有#else定义。
所有我们要使用try和endtry命令
:try|g/#ifdef TEST//#else/+1, /#endif/-1 t $|endtry
解释一下,先找#ifdef TEST, 找到后再找#else, 然后取下一行,再找到#endif取上一行。
最后
以上就是从容夕阳为你收集整理的Vim Global Command用法(g命令)的全部内容,希望文章能够帮你解决Vim Global Command用法(g命令)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复