我想在 Vim 中编译一个程序,运行它,并在 quickfix 列表中显示输出。我认为这应该可行:
:cgetexpr "!cc -o %:r % && ./%:r"
但是,这只会在快速修复列表中显示以下内容:
|| !cc -o %:r % && ./%:r
我也尝试过:
:cgetexpr execute "!cc -o %:r % && ./%:r"
这将引发一个错误:
E121: Undefined variable: execute
E15: Invalid expression: execute "!cc -o %:r % && ./%:r"
如果我省略引号,就会显示类似的错误:
:cgetexpr execute !cc -o %:r % && ./%:r
是否有可能做到这一点?
答案1
如上所述:help :cexpr
,后面的表达式:cexpr
可以是字符串或列表。您尝试过的所有表达式都不会计算为输出的字符串或列表cc
。但是,:help :cexpr
给出了一个可能对您有帮助的示例。
:cexpr system('grep -n xyz *')
:cgetexpr
就像:cexpr
但不会跳到第一个错误。
我证实了
:cgetexpr system("cc hello.c")
可以,但是将变量放入该命令中需要做更多的工作。下面将当前文件的名称插入到命令中。
:exe 'cgetexpr system("cc '.expand('%').'")'