关闭所有quickfix窗口,我使用以下vim命令表达式:
:windo if &buftype == 'quickfix' || &buftype == 'locationlist' | lclose | endif
每当我尝试将其缩写为:
nmap <S-q> :let @a = "%:windo if &buftype == 'quickfix' || &buftype == 'locationlist' | lclose | endif"
在我的init.vim中使用nmap
,我收到了一个错误:
E749:空缓冲区
E488:尾随字符
如何解决?
答案 0 :(得分:3)
|
是命令分隔符;不幸的是(这是一个常见的陷阱),它也会结束任何:map
命令,其余部分会被立即解释,而不是映射的一部分。
:help map-bar
列出了三种不同的解决方案;最常见的是使用特殊<Bar>
表示法而不是|
。
nmap <S-q> :let @a = "%:windo if &buftype == 'quickfix' <Bar><Bar> &buftype == 'locationlist' <Bar> lclose <Bar> endif"
%:windo
是一个错字吗? %
是可疑的。<CR>
;它将一直持续到你自己按<Enter>
为止。这是打算吗?a
而不是执行它?:noremap
;它使映射不受重映射和递归的影响。'buftype'
始终为quickfix
,也适用于位置列表;你可以在测试中删除第二个分支。noremap <S-q> :windo if &buftype == 'quickfix' <Bar> lclose <Bar> endif<CR>