如何在vim中连接几行

时间:2013-12-06 08:38:27

标签: configuration screen vim kdb

我正在使用vim-screen插件,使我能够编写脚本,在同一窗口中启动解释器并向解释器发送行。问题是解释器不接受写在几行上的陈述。

为例: 这将有效f:{[x] y:y+1; Z:y+1; :Z; };

但这不会

f:{[x] y:y+1;
    Z:y+1;
    :Z;
 };

如何编写一个vim函数,我可以调用它来重新整形行以便发送给解释器?

修改: 我没有成功完成这个功能,我想创建一个函数,从这样的输入(可视化选择)

F:{[a;b;r]
//ccc1
   aaa1;
aaa2;
  //ccc2
    aaa3;
};

输出类似F:{[a;b;r] aaa1; aaa2; aaa3; };的内容 所以我创造了赏金

2 个答案:

答案 0 :(得分:6)

如果您想实际修改缓冲区,J / :join会这样做。如果您只想加入发送给解释器的行(但将它们拆分为缓冲区),则可以使用getline()检索选定的行,然后join()。这是一个示例命令:

:command! -range Invoke echomsg join(getline(<line1>,<line2>), '')

修改

基于此,您可以“按摩”getline()返回的行列表。例如。忽略注释行:

:command! -range Invoke echomsg join(filter(getline(<line1>,<line2>), 'v:val !~# "^\\s*//"'), '')

另外剥离前导空格(这在单行中变得难以处理;现在更好地使用函数):

:command! -range Invoke echomsg join(map(filter(getline(<line1>,<line2>), 'v:val !~# "^\\s*//"'), 'substitute(v:val, "^\\s\\+", " ", "g")'), '')

答案 1 :(得分:0)

vimscript脚本中的标准延续字符是下一行开头的反斜杠 。所以,这个

f:{[x] y:y+1;
  \  Z:y+1;
  \  :Z;
 \ };

应该有用。