0

我已经安装了 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 运行时使用 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
4

1 回答 1

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"某些东西得到一些变量替换。

于 2012-08-06T08:25:12.600 回答