【发布时间】:2017-02-03 12:19:27
【问题描述】:
我想做nnoremap Q :q!<cr>和nnnoremap Q :bd<CR>,我该如何混合这两个绑定?
我最理想的做法是让Q 绑定足够智能,以便知道我们何时在缓冲区中,以及何时这是窗口中的最后一个缓冲区。
【问题讨论】:
标签: vim key-bindings
我想做nnoremap Q :q!<cr>和nnnoremap Q :bd<CR>,我该如何混合这两个绑定?
我最理想的做法是让Q 绑定足够智能,以便知道我们何时在缓冲区中,以及何时这是窗口中的最后一个缓冲区。
【问题讨论】:
标签: vim key-bindings
map <expr> (:h map-<expr>) 是你的朋友。
nnoremap <expr> Q yourConditionExpression ? ':q!<cr>':':bd<cr>'
在上面
yourConditionExpression
可以是布尔表达式,例如3>0 或函数返回布尔值。你可以把检查逻辑放在那里。
【讨论】:
yourConditionExpression - 当读取 .vimrc 文件时。例如,如果映射是nnoremap <expr> <F12> MyFunc == 0() ? ':Yep' : 'Nope',那么一旦读取键绑定,按 F12 总是返回相同的结果,即使执行 :echom MyFunc() 会返回不同的结果。
nnoremap <expr> <F12> MyFunc() 并让您的MyFunc() 返回击键(字符)。虽然我没有测试。但这应该不是问题,因为在我的设置中我有getchar() 的功能,如果它只被评估一次,它将不起作用。
exe "normal! \<c-w>l" 给出错误 E523: Not allowed here(在 noremap