Configuration 如何在vim中连接多条线

Configuration 如何在vim中连接多条线,configuration,screen,vim,kdb,Configuration,Screen,Vim,Kdb,我使用的是vim屏幕插件,它使我能够编写脚本,在同一窗口中启动解释器,并向解释器发送行。问题是解释器不接受写在几行上的语句 例如: 这将工作f:{[x]y:y+1;Z:y+1;:Z;} 但这不会 f:{[x] y:y+1; Z:y+1; :Z; }; 我如何编写一个vim函数,调用它来重塑行,以便发送给解释器 编辑: 我没有成功地创建这个函数,我想创建一个函数,它可以从这样的输入(可以被可视化地选择) 输出如下内容:{[a;b;r]aaa1;aaa2;aaa3;} 因此,我创

我使用的是
vim屏幕
插件,它使我能够编写脚本,在同一窗口中启动解释器,并向解释器发送行。问题是解释器不接受写在几行上的语句

例如: 这将工作
f:{[x]y:y+1;Z:y+1;:Z;}

但这不会

f:{[x] y:y+1;
    Z:y+1;
    :Z;
 };
我如何编写一个vim函数,调用它来重塑行,以便发送给解释器

编辑: 我没有成功地创建这个函数,我想创建一个函数,它可以从这样的输入(可以被可视化地选择)

输出如下内容:{[a;b;r]aaa1;aaa2;aaa3;}
因此,我创建了一个赏金,如果您想实际修改缓冲区,
J
/
:join
执行该操作。如果您只想连接发送给解释器的行(但将它们分割在缓冲区中),可以使用
getline()
检索所选行,然后
join()
检索它们。下面是一个示例命令:

:command! -range Invoke echomsg join(getline(<line1>,<line2>), '')
另外,去掉前导空格(这在一行中变得很笨拙;现在最好使用函数):

:命令-范围调用echomsg连接(映射(筛选器(getline(,),'v:val!~#“^\\s*/”),'substitute(v:val,“^\\s\\+”,”“,“g”),“”)

vimscript脚本中的标准连续字符是下一行开头的反斜杠。那么这个

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

应该行。

可能有50行。。。我不能使用所选内容吗?您可以
y
ank,然后
join(@“,”)
选择也是如此,但这不会占用更少的资源,而且会破坏寄存器。
这里是范围的边界,而不是单独的行。我想这可能会混淆@statquant。有人能给我一个如何调用此代码的示例吗?如果您的函数
F:
为星形,我在这里有点困惑ts在第2行,以
}结尾;
在第8行,你可以用
:2,8Invoke
来调用它。你可以帮助你解释为什么Ingo的答案不起作用吗?当我试图1)在视觉模式下选择4行,然后选择to do 2)
:'想法是定义
:命令一次,然后调用
:'
: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")'), '')
f:{[x] y:y+1;
  \  Z:y+1;
  \  :Z;
 \ };