我是靠谱客的博主 从容夕阳,最近开发中收集的这篇文章主要介绍Vim Global Command用法(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之间的行

提取宏定义

有如下代码,现在要求提取出当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命令)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(47)

评论列表共有 0 条评论

立即
投稿
返回
顶部