我正在使用 vim 来编辑 lua 脚本(尽管这与 vim 有关,与 lua 无关(。我目前已映射
:map <F1> :w^M:!lua %^M
这样我就可以在当前文件中按 F1 来执行它并查看任何结果,然后再次按 Enter 返回编辑。
有时,我正在使用一个包含多个不同文件的项目,其中一个是主文件,因此我想实现以下内容:
- 按
<Control-F1>
将当前文件的名称 (%( 存储到一个变量中,我们将其称为mainfile
。 - 如果设置了
mainfile
,则<F1>
执行:w^M:!lua ${mainfile}^M
,否则执行当前文件(如上所述(。
我以前使用过很多 vim,但没有使用它的脚本功能 - 例如,:let mainfile = %
似乎不起作用(无效表达式(。
有没有简单的方法可以做到这一点?我有一种感觉,如果可能的话,它会是 3 行。
假设mainfile
已在全局范围内设置(见:h global-variable
(,类似于以下函数的东西应该可以解决问题:
function! LuaExecMainOrCurrent ()
execute ":w" expand("%")
execute ":!lua" exists("g:mainfile") ? g:mainfile : expand("%")
endfunction
execute
命令(见:h :execute
(组装一个字符串并将其解释为另一个命令。
我们使用条件表达式(见:h expr1
(而不是if(见:h if
(。
我们可以像这样调用函数:
:call LuaExecMainOrCurrent()