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')可以全表达式获取当前文件名,即路径+文件名。

  • 帮助页面的摘录是什么意思?

    用| non-zero-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>
    

    最佳答案

    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帮助报价中引用)。
  • 2Number,非零。因此,您应该能够在示例中将2替换为1并获得相同的结果。
  • 关于vim - shellescape函数中的数字1在vim中意味着什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21224865/

    10-12 13:54