我想要执行
nnoremap Q :q!<cr>
和nnnoremap Q :bd<CR>
,如何将这两个绑定混合起来?我理想中的情况是使Q
绑定能够智能地知道我们是否在缓冲区中以及是否是窗口中的最后一个缓冲区。nnoremap Q :q!<cr>
和nnnoremap Q :bd<CR>
,如何将这两个绑定混合起来?我理想中的情况是使Q
绑定能够智能地知道我们是否在缓冲区中以及是否是窗口中的最后一个缓冲区。map <expr>
(:h map-<expr>
) 是你的朋友。
nnoremap <expr> Q yourConditionExpression ? ':q!<cr>':':bd<cr>'
以上面
yourConditionExpression
可以是一个布尔表达式,例如3>0
,也可以是返回布尔值的函数。您可以将检查逻辑放在那里。
.vimrc
文件时调用了yourConditionExpression
一次。例如,如果映射是nnoremap <expr> <F12> MyFunc == 0() ? ':Yep' : 'Nope'
,那么一旦读取键绑定,按下F12始终返回相同的结果,即使执行:echom MyFunc()
返回不同的结果。 - Brent Faustnnoremap <expr> <F12> MyFunc()
,并让你的MyFunc()
返回按键(字符)操作。虽然我没有测试过,但这应该不是问题,因为在我的设置中,函数中有getchar()
,如果它只被评估一次,它将无法工作。 - Kentexe "normal! \<c-w>l"
在 noremap <expr> 中会出现错误 E523: Not allowed here。 - Brent Faust