如何快捷方式(nmap)windo命令表达式?

时间:2018-03-27 08:54:56

标签: vim

关闭所有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:尾随字符

如何解决?

1 个答案:

答案 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而不是执行它?
  • You should use :noremap;它使映射不受重映射和递归的影响。
  • 'buftype'始终为quickfix,也适用于位置列表;你可以在测试中删除第二个分支。
noremap <S-q> :windo if &buftype == 'quickfix' <Bar> lclose <Bar> endif<CR>