我使用以下方式将视觉选择的vim文本传递给Ruby脚本:
system("echo -n " . shellescape(var_holding_selected_text) . " | my/ruby/script")
该脚本能够从STDIN读取文本,但我发现所有换行符都以反斜杠开头。我认为这是因为shellescape
函数逃脱了换行符。我有两个问题:
shellescape
转义换行符和/或null字节,如果它也引用字符串?显然,引用字符串就足够了,因为我在脚本中转义时会收到文字反斜杠。答案 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的全部内容而无需解释。