vim map toggle key来生成JSLint

时间:2012-08-06 07:58:53

标签: vim

我安装了nodejs和jslint,并在ftplugin目录下创建了javascript.vim文件。 javascript.vim包含以下行:

setlocal makeprg=jslint\ %
setlocal errorformat=%f:%l:%c:%m

nmap <F5> :w<CR>:make<CR>:cw<CR><CR>:copen<CR>

这将打开jslint报告错误的快速修复窗口。现在我想在第一个F5运行make和在第二个F5关闭错误窗口上显示错误窗口时使用F5作为切换键。

我为此

创建了以下代码
setlocal makeprg=jslint\ %
setlocal errorformat=%f:%l:%c:%m

let s:showMakeWnd = "0"
function! ToggleMake()
    echo "Make Wnd mode: " . s:showMakeWnd

    if s:showMakeWnd == "0"
        execute ":w<CR>:make<CR>:cw<CR>:copen<CR>"
    elseif
        execute ":cclose<CR>"
    endif

    let s:showMakeWnd = (s:showMakeWnd == "0" ? "1" : "0")
endfunction

nmap <F5> :call ToggleMake()<CR>

但在按F5后,我收到以下错误:

"<CR>:make<CR>:cw<CR>:copen<CR>"
Error detected while processing function ToggleMake:
line 10:
"<CR>:make<CR>:cw<CR>:copen<CR>" E212: Can't open file for writing

1 个答案:

答案 0 :(得分:0)

execute执行 Ex 命令。你只需要它来扩展变量,你没有这样做,所以

execute ":w<CR>:make<CR>:cw<CR>:copen<CR>"

你应该写

w
make
cw
copen

您需要的语法是normal命令

norm :w<CR>:make<CR>:cw<CR>:copen<CR>

但它不必要地更脆弱(我不确定这里的特殊字符;常见用法是exe "norm something"其中某些获得一些变量替换。