将文件路径传递给 vim 中的 shell 命令
Pass filepath to a shell command in vim
我如何正确 'escape' vim 中的以下命令?
:!file=expand('%:r')
基本上,我想做类似的事情:
$ file=my_filename
这样我就可以执行后续的 shell 命令来引用 $file
。目前我收到此错误:
Press ENTER or type command to continue
/bin/bash: -c: line 0: syntax error near unexpected token (' \ /bin/bash: -c: line 0:
file=expand('test')'
我认为这基本上意味着在传递给 shell 之前它不是 escaping/generating 文件名。我该怎么做?
您可以将其包装在 execute
中,例如:
:execute "!file=" . expand('%:r')
也许我漏掉了什么,但是当你运行:!myvar=42
然后:!echo $myvar
,你可以看到这个变量没有被保存,肯定是因为它在运行中两个不同的 shell 会话。
要使每个 shell 命令都可以访问您的变量,您可以使用 setenv()
::call setenv('myvar', '42')
,或者在您的情况下:
:call setenv('file', expand('%:r'))
要将 filename/path 传递给 shell 使用命令行特价
:!AnyShellCommand %:r
设置环境变量使用:let
" like this
:let $AnyEnvVar = expand('%:r')
" or like this
let $AnyEnvVar = fnamemodify(@%, ':r')
我如何正确 'escape' vim 中的以下命令?
:!file=expand('%:r')
基本上,我想做类似的事情:
$ file=my_filename
这样我就可以执行后续的 shell 命令来引用 $file
。目前我收到此错误:
Press ENTER or type command to continue
/bin/bash: -c: line 0: syntax error near unexpected token(' \ /bin/bash: -c: line 0:
file=expand('test')'
我认为这基本上意味着在传递给 shell 之前它不是 escaping/generating 文件名。我该怎么做?
您可以将其包装在 execute
中,例如:
:execute "!file=" . expand('%:r')
也许我漏掉了什么,但是当你运行:!myvar=42
然后:!echo $myvar
,你可以看到这个变量没有被保存,肯定是因为它在运行中两个不同的 shell 会话。
要使每个 shell 命令都可以访问您的变量,您可以使用 setenv()
::call setenv('myvar', '42')
,或者在您的情况下:
:call setenv('file', expand('%:r'))
要将 filename/path 传递给 shell 使用命令行特价
:!AnyShellCommand %:r
设置环境变量使用
:let
" like this :let $AnyEnvVar = expand('%:r') " or like this let $AnyEnvVar = fnamemodify(@%, ':r')