![如何使用变量内容作为 vim 命令的参数?](https://linux22.com/image/1285744/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%E5%8F%98%E9%87%8F%E5%86%85%E5%AE%B9%E4%BD%9C%E4%B8%BA%20vim%20%E5%91%BD%E4%BB%A4%E7%9A%84%E5%8F%82%E6%95%B0%EF%BC%9F.png)
例如假设我做了
:let foo=pattern
现在我想执行Ggrep patter
,但使用变量foo
而不是文字patter
字符串。
:echo foo
输出pattern
,但是
:Ggrep foo
只寻找 foo
更新:
构建一个命令字符串然后对其运行 :execute 不是一个解决方案,而是一种 hack。并且它会破坏任何非平凡变量值。
答案1
这与变量无关,但也许 vim 缩写命令可以提供帮助。从命令行尝试:
:abbreviate foo pattern
然后
:Ggrep foo<space>
它将把“foo”补充到你的“模式”中。
答案2
关于什么:
:execute ':grep ' . foo
答案3
如果您不喜欢该:exe
解决方案,您可以使用表达式寄存器将变量的内容“读入”命令行=
。例如,键入:Ggrep
然后按Ctrl-r然后键入=foo
并按Enter。假设变量foo
包含“pattern”,您的命令行现在应如下所示:
:Ggrep pattern
这样做的好处是你可以看到将要运行的实际命令,甚至可以在Enter第二次按下之前对其进行修改。
看:
:help "=
答案4
使其成为环境变量!
鉴于:
:let $foo="whatever"
此命令
:e $foo
编辑文件whatever
,因为 Vim 识别$
命令并展开它。如果要将其作为文字,则必须转义美元符号。