加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

vim – :g显示下面的功能和注释

发布时间:2020-12-15 17:02:52 所属栏目:安全 来源:网络整理
导读:我不确定这是否可以通过正则表达式实现,所以这里继续并希望最好. 如果我在vim, :g/function 我得到了所有函数行的列表. 现在,我喜欢这个,但是在第一个非评论行之前有评论(!),所以我得到类似的东西: 3 function MyFunction()4 !This is a comment5 !This is
我不确定这是否可以通过正则表达式实现,所以这里继续并希望最好.

如果我在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命令.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读