Bexec可以用来在Vim中直接执行当前窗口中的内容,并输出到另一个窗口中。
Bexec根据以下条件和顺序来决定一个代码的类型:
- SheBang
- FileType
Bexec先根据SheBang来决定需要调用的解释器的路径,如果没有找到,则直接根据vim内建的filetype变量来查找解释器。
解释器存储于一个全局变量中,她也提供了一个变量用于用户来指定需要调用的解释器。
最近在使用Bexec时遇到了新的问题,无法直接调用bash。原因与vim的内建变量filetype的设置和所使用的操作系统有关。
由于shell script的filetype被设置成了sh,所以Bexec直接根据filetype去找,找到的解释器将是sh,这个解释器可能不是我们想要的,我们可能想要的bash,怎么办呢。vim中filetype的设置,在filetype.vim中进行?查看代码后发现,当发现SheBang包括bash时,将会设置一个b:bash的变量,当此时filetype还是sh。那么我们可以在Bexec中这么修改:
function! <SID>GetInterpreterFromFiletype() let l:type = &filetype " add the following conditional test if l:type == "sh" && exists("b:is_bash") && b:is_bash == 1 let l:type = "bash" endif if !has("win32") return get(s:interpreters, l:type, -1) else let idx = index(s:interpreters, l:type) if idx != -1 return s:interpreters[idx] endif return -1 endif endfunction
这样,Bexec在win32上直接会去找bash解释器,这样就ok了。
由于默认的Bexec执行时总是把输出结果窗口放到顶部,所以我修正了这个bug,并且添加了一个可以设置默认窗口高度的选项。
这里是修改过的Bexec.vim