vim:编译当前缓冲区的函数出现问题

vim:编译当前缓冲区的函数出现问题,vim,Vim,我有这个函数来编译我的tex文件: function! CompileTex() silent write! call setqflist([]) echon "compiling with arara ..." exec 'lcd %:h' if expand("%:p") =~# '\(figuras\|figures\)' let mainfile = fnameescape(expand("%:p")) else

我有这个函数来编译我的tex文件:

function! CompileTex()
    silent write!
    call setqflist([])
    echon "compiling with arara ..."
    exec 'lcd %:h'

    if expand("%:p") =~# '\(figuras\|figures\)'
        let mainfile = fnameescape(expand("%:p"))
    else
        let mainfile = fnameescape(Tex_GetMainFileName())
    endif
    let &l:makeprg = 'arara -v ' . mainfile
    silent make!

    if !empty(getqflist())
        copen
        wincmd J
    else
        cclose
        redraw
        echon "successfully compiled"
    endif

endfunction
第一个条件存在,因为在创建图形时,我希望编译当前缓冲区,即使存在主文件。但是,当我在包含“figures”的路径中调用函数时,我得到


mainfile
变量被设置为主tex文件,而不是我想要的当前缓冲区

按照错误消息的建议尝试,并将“lcd%:h”更改为“lcd%:p:h”

此外,您不需要:exec。直接写就行了,这是一个ex命令:

function! CompileTex()
    silent write!
    call setqflist([])
    echon "compiling with arara ..."
    lcd %:p:h
    ...
    etc.

按照错误消息的建议尝试,并将“lcd%:h”更改为“lcd%:p:h”

此外,您不需要:exec。直接写就行了,这是一个ex命令:

function! CompileTex()
    silent write!
    call setqflist([])
    echon "compiling with arara ..."
    lcd %:p:h
    ...
    etc.

这确实修复了错误消息,但是主tex文件仍然被编译,而不是我想要的当前缓冲区。可能是我的设置有问题。检查路径中“figure”的条件是否正确?或者我应该修改它?我觉得这个条件很合适。不过,我不确定Tex_GetMainFileName()的作用。您是否验证了该函数正在执行您想要的操作?谢谢。嗯,我真的不知道发生了什么,因为有时条件有效,有时是无效的。我将进一步调查。这确实修复了错误消息,但主tex文件仍在编译,而不是我想要的当前缓冲区。可能是我的设置有问题。检查路径中“figure”的条件是否正确?或者我应该修改它?我觉得这个条件很合适。不过,我不确定Tex_GetMainFileName()的作用。您是否验证了该函数正在执行您想要的操作?谢谢。嗯,我真的不知道发生了什么,因为有时条件有效,有时是无效的。我会进一步调查。