我正在使用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; };
的内容
所以我创造了赏金
答案 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;
\ };
应该有用。