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

时间:2013-10-23 14:04:48

标签: 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
        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

第一个条件是因为在创建数字时我想编译当前缓冲区,即使有主文件也是如此。但是,当我在包含“数字”的路径中调用该函数时,我得到了

Error detected while processing function CompileTex:
line 4:
E499: Empty file name for '%' or '#', only works with ":p:h": lcd %:h

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

1 个答案:

答案 0 :(得分:1)

尝试显示错误消息,并将“lcd%:h”更改为“lcd%:p:h”。

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

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