gpt4 book ai didi

vim - :g showing functions and comments below

转载 作者:行者123 更新时间:2023-12-04 17:05:30 25 4
gpt4 key购买 nike

我不确定这是否可以用正则表达式来完成,所以在这里希望最好。

如果我在 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) 及其衍生产品 ex 在这些年后仍可在 Linux 上使用,尽管是像 vi 本身一样的克隆形式。)ed 及其早期的 unix 兄弟是第一个使用正则表达式的程序。

好的,创建一个包含 26 行左右的文件,字母表中的每个字母一行,并以 vi、ed 或 ex 开头。 (对于 ed 或 ex,省略 : 字符。)尝试:
:1;/m/p

vi 命令的一般形式是:addr, addr2 命令

在我的示例中,命令只是 p用于打印。 addr1 和 addr2 通常是行号或正则表达式,使用/re/向下搜索或 ?re?向上搜索。试试 /c/;/g/p这促使我解释: ;使编辑器在评估第二个地址之前切换到第一个地址找到的行。在默认的 wrapscan 模式下并不总是很重要,但如果您键入 :set nows (不在 ed 中)然后搜索模式将不会换行以及 , 之间的区别和 ;变得更大。

我的示例中没有使用最重要的行模式命令,但应在此处提及: :s/pattern/replacement/:s/pattern/replacement/g .这个命令当然可以取地址,所以典型的命令是 1,$s/old/new/g $标识最后一行。大多数命令的默认地址是当前行,但对于 globalg命令默认为 1,$并具有一般形式
addr1, addr2 g /pattern/ any_linemode_command

例如,假设我是 Jeff但我想怪 Joel对于日志中不同类型的严重错误。我需要保持隐身,而不是仅仅在警告线上改变杰夫,所以我需要:
g/critical.*error/s/Jeff/Joel/

这将在具有“严重任何错误”模式的文件的每一行上运行替换命令,然后将 Jeff 更改为 Joel。

所以现在答案应该相当清楚了。该命令的工作方式如下:在文件的每一行上,检查该行是否以/^func/开头(func 在行的开头),如果是,则以 . 开头。 (当前行)然后,将当前地址重置为该行( ; )搜索不以 ! 开头的行,如果找到,从找到的行号中减去一个(稍微回到最后的实际注释),然后运行 ​​ print命令。

关于vim - :g showing functions and comments below,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2268324/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com