vim – :g显示下面的功能和注释
我不确定这是否可以通过正则表达式实现,所以这里继续并希望最好.
如果我在vim, :g/function 我得到了所有函数行的列表. 现在,我喜欢这个,但是在第一个非评论行之前有评论(!),所以我得到类似的东西: 3 function MyFunction() 4 !This is a comment 5 !This is also a comment 23 function MyOtherFunction() 24 !This is a comment 25 !This is also a comment 有可能吗?
是
:g/^func/.;/^[^!]/-1 print 更新 提出了一个解释……所以这里… vi(1)之所以强大,部分原因在于它是Ken Thompson原始的面向行的ed(1)编辑器的游标寻址扩展. (ed(1)及其衍生版本在这些年之后仍然可以在Linux上使用,虽然它是像vi本身那样的克隆形式.)ed和它的早期un??ix兄弟姐妹是第一个使用正则表达式的程序. 好的,创建一个包含26行左右的文件,每个字母对应一个字母,然后启动vi,ed或ex. (对于ed或ex,请忽略:字符.)尝试: :1;/m/p vi命令的一般形式是:addr,addr2 commmand 在我的例子中,命令只是p用于打印. addr1和addr2通常是行号或正则表达式使用/ re /向下搜索或者?向上搜索.试试/ c /; / g / p,它提示我解释一下:导致编辑器在评估第二个地址之前切换到第一个地址找到的行.它在默认的包裹扫描模式下并不总是重要,但是如果你键入:set nows(不在ed中),那么搜索模式将不会包装和之间的区别,和;变大了 在我的例子中没有使用最重要的行模式命令,但是应该在这里提到:s / pattern / replacement /或:s / pattern / replacement / g.此命令当然可以使用地址,因此典型命令为1,$s / old / new / g $标识最后一行.大多数命令的默认地址是当前行,但对于global或g命令,它默认为1,$并具有常规形式 addr1,addr2 g /pattern/ any_linemode_command 例如,假设我是Jeff,但我想将Joel归咎于日志中不同类型的严重错误.我需要隐身,不要仅仅根据警告线改变杰夫,所以我需要: g/critical.*error/s/Jeff/Joel/ 这将在文件的每一行上运行substitute命令,该模式具有“critical anything error”模式,然后将Jeff更改为Joel. 所以现在答案应该是相当清楚的.该命令的工作原理如下:在文件的每一行上,检查该行是否以/ ^ func /(行开头的func)开头,如果是,则以.开头. (当前行)然后,将当前地址重置为该行(;)搜索不以!开头的行,如果找到,则从找到的行号中减去1(稍微备份到上一个实际注释)然后只需运行print命令. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |