将Vimscript中的多行字符串传递给外部脚本

时间:2014-04-30 06:16:09

标签: vim

我使用以下方式将视觉选择的vim文本传递给Ruby脚本:

system("echo -n " . shellescape(var_holding_selected_text) . " | my/ruby/script")

该脚本能够从STDIN读取文本,但我发现所有换行符都以反斜杠开头。我认为这是因为shellescape函数逃脱了换行符。我有两个问题:

  • 为什么shellescape转义换行符和/或null字节,如果它也引用字符串?显然,引用字符串就足够了,因为我在脚本中转义时会收到文字反斜杠。
  • 有没有更好的方法将文本传递给我的ruby脚本?

2 个答案:

答案 0 :(得分:3)

绕过所有转义问题(以及shell命令行的潜在大小限制)的替代方法是将文本写入临时文件(使用tempname()writefile()),并且只是将该文件名传递给:cat到Ruby脚本。然后,使用delete()进行清理。

答案 1 :(得分:1)

刚刚找到Claytron's帮助的方法:

silent execute '!printf "\%s" '. shellescape(a:text, 1) .' | nc localhost 2224'

printf应该通过shellescape的全部内容而无需解释。