vim脚本 - 构建当前/主文件

时间:2018-06-04 15:35:06

标签: vim

我正在使用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行一样。

1 个答案:

答案 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()