逃逸";%&引用;在Vim中进行炮击时,因此它';它没有扩展到文件名吗?
假设我将此vimscript设置为“/tmp/example.vim”: 如果我打开该文件并使用逃逸";%&引用;在Vim中进行炮击时,因此它';它没有扩展到文件名吗?,vim,Vim,假设我将此vimscript设置为“/tmp/example.vim”: 如果我打开该文件并使用:so%运行它,输出将是 START; /tmp/example.vim END 因为“%”已扩展为缓冲区名称。我希望输出是 START; % END 我可以使用泛型的escape()方法来转义百分号。这项工作: let g:input = "START; % END" exec("! clear && echo " . escape(shellescape(g:input), "
:so%
运行它,输出将是
START; /tmp/example.vim END
因为“%”已扩展为缓冲区名称。我希望输出是
START; % END
我可以使用泛型的escape()
方法来转义百分号。这项工作:
let g:input = "START; % END"
exec("! clear && echo " . escape(shellescape(g:input), "%"))
但这真的是最好的方法吗?我肯定还有更多的角色我应该逃避。是否有专门用于此目的的转义功能?还是一种更好的脱壳方式?您需要正确地转义“%”。因此,它应该是:
let g:input = "START; \\% END"
这似乎可以做到:
let g:input = "START; % END"
echo system("echo " . shellescape(g:input))
应该注意的是,我并不真正关心输出;我将在更大的脚本中与
静默一起使用。用于:
命令,您需要将可选的{special}
参数传递给shellescape()
:
当{special}
参数存在且为非零时
数字或非空字符串(|非零参数|),然后是特殊
项目,如
、%
、#
和
前面将加上
反斜杠。此反斜杠将被|::再次删除代码>|
指挥部
我的真实脚本中的输入不是固定的。我可以使用escape()
通常对每个“%”进行转义,但请看问题的结尾。如果您仍要丢弃回显文本,则可以使用调用@echristopherson是的,这只是为了查看示例脚本中的输出。
let g:input = "START; % END"
echo system("echo " . shellescape(g:input))
:exec("! clear && echo " . shellescape(g:input, 1))