Bexec modified

Bexec可以用来在Vim中直接执行当前窗口中的内容,并输出到另一个窗口中。
Bexec根据以下条件和顺序来决定一个代码的类型:

  1. SheBang
  2. 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

你可能感兴趣的:(Bexec modified)