我对Vim / Vi很新,我需要编写一个自定义函数/宏。 是否可以定义一个命令(例如:mycommand)来格式化当前文件中的行,如下所示:
初始行:
This is line 1
This is line 2
This is line 3
This is line 4
This is line 5
This is line 6
This is line 7
This is line 8
结果:
This is line 1\nThis is line 2
This is line 3\nThis is line 4
This is line 5
This is line 6\nThis is line 7\nThis is line 8
如何创建这样的脚本?我在哪里放置它?
答案 0 :(得分:1)
您可以录制一个宏,通过\n
分隔符连接两行,例如在您的vimrc中:
let @x='gJi\n^['
(上面^[
,您按ctrl-v Esc
)
假设您的光标位于第一行,您可以在正常模式下执行@x
,然后在第二个模块执行)J@@
,然后完成工作。
您可以将这些操作包装在函数中,也可以将它们创建为映射。
我编写了一个Join
脚本:https://github.com/sk1418/Join,它支持使用分隔符和其他功能连接行,在你的情况下,你可以执行命令::J '\n'
,它会做什么宏(@x)
以上。您也可以将它放在您的功能中,例如:
function Foo()
Join '\n'
join!
Join '\n'
endfunction
你做的修改,将问题转化为另一个...但是它可以解决,我在下面列出了两种可能性,一种是vim方式,另一种是使用外部awk工具,如果你的系统上有awk可用
带有vim:s
cmd 的此命令应该为您完成:
%s/\n\n/∢/g|%s/\n\ze./\\n/g|%s/∢/\r/g
∢
是通过按ctrl-v u2222
完成的,它只是一个特殊的字符,在您的文本中不存在,您也可以使用其他单字符字符。%!awk -v RS='\n\n' '{gsub(ORS, "\\n")}7'
这将为您进行转换,但是在文件末尾会留下额外的\n
,只需删除它。