加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-15 21:01:05 所属栏目:安全 来源:网络整理
导读:我想在命令行模式下映射VIM中的键,但不是在搜索模式下(带有前导/),如下所示: 将Q映射到q 将W映射到w 有时我在VIM中键入了错误的命令,例如:Q和:W,我想让这些错误的命令正确. 如果我可以将Q映射到q并将W映射到w,我可以使错误的命令正确. 我试过cmap Q q和cm
我想在命令行模式下映射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'

最安全的可能是捷径.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读