Vim中的自定义功能

时间:2016-12-12 11:26:05

标签: vim vi

我对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

如何创建这样的脚本?我在哪里放置它?

1 个答案:

答案 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

%!awk -v RS='\n\n' '{gsub(ORS, "\\n")}7'

这将为您进行转换,但是在文件末尾会留下额外的\n,只需删除它。

相关问题