1

我将如何在 vim 中正确地“转义”以下命令?

:!file=expand('%:r')

基本上,我想做类似的事情:

$ file=my_filename

这样我就可以执行后续的 shell 命令来引用$file. 目前我收到此错误:

按 ENTER 或键入命令继续
/bin/bash: -c: line 0: syntax error near unexpected token (' \ /bin/bash: -c: line 0: file=expand('test')'

我认为这基本上意味着它在传递给shell之前没有转义/生成文件名。我该怎么做?

4

3 回答 3

2
  1. 要将文件名/路径传递给 shell,请使用命令行特殊功能

    :!AnyShellCommand %:r
    
  2. 设置环境变量使用:let

     " like this
     :let $AnyEnvVar = expand('%:r')
     " or like this
     let $AnyEnvVar = fnamemodify(@%, ':r')
    
于 2021-01-20T08:10:57.467 回答
1

也许我错过了一些东西,但是当你运行:!myvar=42then时:!echo $myvar,你可以看到变量没有保存,当然是因为它在两个不同的 shell 会话中运行。

要使每个进一步的 shell 命令都可以访问您的变量,您可以使用setenv(): :call setenv('myvar', '42'),或者在您的情况下:

:call setenv('file', expand('%:r'))
于 2021-01-20T07:53:48.757 回答
0

您可以将其包装在 中execute,例如:

:execute  "!file=" . expand('%:r')
于 2021-01-20T07:31:40.973 回答