我正在使用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行一样。
答案 0 :(得分:1)
假设已在全局范围内设置了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()