如何在VIM中的每个注释(如“注释”)前插入一个空行?
您好,在Gvim中,我需要在文件中的每个注释前插入一两行空白 乙二醇 在运行comamnd之后,应该如何在VIM中的每个注释(如“注释”)前插入一个空行?,vim,Vim,您好,在Gvim中,我需要在文件中的每个注释前插入一两行空白 乙二醇 在运行comamnd之后,应该 #comment 1 #comment 2 statement 1 statement 2 #comment 3 我该怎么做 谢谢 更新:谢谢你的回答 但是如果评论是连续的,我不希望在它们之间添加换行符。有办法做到这一点吗 乙二醇 我不想这样 #comment 1 #comment 2 使用此命令::%s/^\ze\s*#/\r/您也可以使用此命令::g/^\O 好的,这里有一个解
#comment 1
#comment 2
statement 1
statement 2
#comment 3
我该怎么做
谢谢
更新:谢谢你的回答
但是如果评论是连续的,我不希望在它们之间添加换行符。有办法做到这一点吗
乙二醇
我不想这样
#comment 1
#comment 2
使用此命令:
:%s/^\ze\s*#/\r/
您也可以使用此命令::g/^\O
好的,这里有一个解释:
这是:global/^#/normal O
的快捷方式,表示:
- 对于以“#”开头的每一行(
):global/^#/
- 在“正常模式”下执行“O”命令(
)–这意味着执行“O”键在“正常”(非插入和非:命令)VIM模式下的操作。“O”插入一个新行normal O
- 不影响第一行
示例输出看起来好像在文件的第一行之前不应该有换行符。
您可以添加一个lookbehind检查来实现这一点
:%s/^\n\@l
更新后的问题应该在这里使用,即,如果在当前行之前没有注释行,则只在当前行之前添加一个换行符
:g/^\%^\@
^\%^@如果文件开头在该行之前,则与该行不匹配<代码>:h\%^
和:h\@
\(^\s*.\n\)\@仅在前一行的第一个非空字符不是#时匹配此行
这个正则表达式将改变
#comment 1
#comment 2
statement 1
statement 2
#comment 3
#评论1
#评论2
报表1
报表2
#评论3
到
#评论1
#评论2
报表1
报表2
#评论3
有一个解决方案,也适用于“未改进的vi”:
:2,$g/^[TAB]*#/s/^/^M/
其中TAB和^M必须作为相应的控制字符输入
希望这有帮助-我感谢Heikki指出第一线的问题还有另一种方法(也适用于第一线)
我认为这是迄今为止最好的答案,因为这是最直观的,但也许你应该解释一下它是如何工作的以及为什么工作的。:g[lobal]
胜过:s[substitute]
+1先生,这是我所需要的全部,但实际上并没有回答这个问题,因为它不想让空格注释加倍。
#comment 1
#comment 2
#comment 1
#comment 2
statement 1
statement 2
#comment 3
#comment 1
#comment 2
statement 1
statement 2
#comment 3
:s/^[ TAB]*#-1s/^/\r/