shellescape函数中的数字1在vim中意味着什么?

时间:2014-01-20 01:22:50

标签: vim

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命令映射到F4中。
  • :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> 

2 个答案:

答案 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的内容),则会将其双重转义。

编辑专门回答添加到(已编辑)原始帖子的两个问题:

  1. 您可以使用shell获取shellescape()设置(在:echo &shell帮助报价中引用)。

  2. 2Number且非零。因此,您应该能够在示例中将2替换为1并获得相同的结果。