微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

vim – 如何在命令行模式下映射键,但不在搜索模式下映射

我想在命令行模式下映射VIM中的键,但不是在搜索模式下(带有前导/),如下所示:

>将Q映射到q
>将W映射到w

有时我在VIM中键入了错误的命令,例如:Q和:W,我想让这些错误的命令正确.

如果我可以将Q映射到q并将W映射到w,我可以使错误的命令正确.

我试过cmap Q q和cmap W w,但是这也会影响搜索模式,即/ Query为/ query(实际上你不能输入上面的Q).

我也试过了cabbrev Q q,这也会影响搜索模式.

那么,还有其他命令可以满足我的要求吗?

谢谢.

解决方法

有很多方法可以做到,而且两者都不是很简单.

使用命令,您需要处理属性

command! -nargs=* -complete=file -range=% -bang -bar W w
command! -bang -bar Q q

使用cabbrev,wiki中描述了陷阱,因此您需要这样做:

cnoreabbrev W <C-r>=(getcmdtype()==':' && getcmdpos()==1 ? 'w' : 'W')<CR>

我有一个用于此目的的功能

function! s:CAbbrev(from,to)
    execute 'cnoreabbrev ' . a:from . ' <C-r>=(getcmdtype()==#'':'' && getcmdpos()==1 ? ' . string(a:to) . ' : ' . string(a:from) . ')<CR>'
endfunction

使用cmap,您需要< expr>限定符,你需要或多或少与cabbrev相同的预防措施:

cnoremap <Nowait> <expr> W getcmdtype() ==# ':' && getcmdpos() == 1 ? 'w' : 'W'

最安全的可能是捷径.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐