vim命令让我困惑。我已多次阅读并重新阅读:help shellescape()
。我仍然不理解1
中数字shellescape(expand('%:p'), 1)
的含义。
这是我想要了解的完整命令:
:nnoremap <F4> :exe ':silent !"c:\Program Files\Mozilla Firefox\firefox.exe"'shellescape(expand('%:p'), 1)<CR>
让我们一块一块地打破这个长长的命令。
:exe
将执行一些命令。:silent !
将以静默方式执行shell命令"c:\Program Files\Mozilla Firefox\firefox.exe"
可以调用我的firefox程序。shellescape()
,有空白被删除。 expand('%:p')
可以在完整表达式中获取当前文件名,即path + filename。摘自帮助页面是什么意思?
使用|非零arg | {special}和'shell'在尾部包含“csh” 第二次逃脱。
在s/(ha.*)(world)/\2\1/g
中是否有一些与1或2相同的含义?
请详细举一个简单的例子。
我有两个与该主题相关的问题
1.我可以通过哪种方式获得我的gvim中有多少种贝壳?
2.在哪种情况下,我可以在shellescape()中将1
更改为2
?
:nnoremap <F4> :exe ':silent !"c:\Program Files\Mozilla Firefox\firefox.exe"'shellescape(expand('%:p'), 2)<CR>
答案 0 :(得分:6)
shellescape()
基本上有两种不同的用途;一个是Vimscript system()
函数,另一个是:!
Ex命令。虽然大多数转义需求在两种用途中都是相同的(例如,处理空格,参数必须用引号括起来), :!
命令需要一些额外的转义,因为在命令行中, Vim为%
等符号赋予特殊含义(将其替换为当前文件名)。 system()
不会发生这种情况。
因此,要告诉shellescape()
使用哪种转义模式,它会有额外的{special}
参数;如果您传递1
(或任何其他评估为&#34; true&#34;的值),其他字符也会被转义。
TL; DR:为1
命令传递:!
,0
或省略与system()
一起使用的参数。
答案 1 :(得分:2)
来自shellescape()
的帮助:
shellescape({string} [, {special}]) shellescape()
Escape {string} for use as a shell command argument.
On MS-Windows and MS-DOS, when 'shellslash' is not set, it
will enclose {string} in double quotes and double all double
quotes within {string}.
For other systems, it will enclose {string} in single quotes
and replace all "'" with "'\''".
When the {special} argument is present and it's a non-zero
Number or a non-empty String (non-zero-arg), then special
items such as "!", "%", "#" and "<cword>" will be preceded by
a backslash. This backslash will be removed again by the :!
command.
示例中的1
只是告诉shellescape()
使用反斜杠转义特殊字符。如果您在!
返回的路径中(例如)expand()
,则会将其替换为\!
。
shell
是一个选项:
'shell' 'sh' E91
'shell' 'sh' string (default $SHELL or "sh",
MS-DOS and Win32: "command.com" or
"cmd.exe", OS/2: "cmd")
global
Name of the shell to use for ! and :! commands.
- :help 'shell'
“With a non-zero-arg {special} and 'shell' containing "csh" in the tail it's escaped a second time
”表示如果您的示例shellescape()
为special
提供了非零参数(您的示例有1
),则表示将shell
检查"csh"
,如果找到它(如果shell
设置为包含csh
的内容),则会将其双重转义。
编辑专门回答添加到(已编辑)原始帖子的两个问题:
您可以使用shell
获取shellescape()
设置(在:echo &shell
帮助报价中引用)。
2
是Number
且非零。因此,您应该能够在示例中将2
替换为1
并获得相同的结果。