Vim 如何在命令行模式下映射键,而不是在搜索模式下映射键
我想在命令行模式下映射VIM中的一个键,但不想在搜索模式下映射(带前导的Vim 如何在命令行模式下映射键,而不是在搜索模式下映射键,vim,Vim,我想在命令行模式下映射VIM中的一个键,但不想在搜索模式下映射(带前导的/),如下所示: 将Q映射到Q 从西到西映射 有时我在VIM中输入了错误的命令,比如:Q和:W,我希望这些错误的命令是正确的 如果我可以将Q映射到Q和W映射到W,我就可以将错误的命令映射为正确的命令 我尝试了cmap Q和cmap W,但这也会影响搜索模式,即/Query成为/Query(实际上您无法键入较高的Q) 我还尝试了cabbrev Q,这也会影响搜索模式 那么,还有其他命令可以满足我的要求吗 谢谢。在本例中,您
/
),如下所示:
- 将Q映射到Q
- 从西到西映射
:Q
和:W
,我希望这些错误的命令是正确的
如果我可以将Q
映射到Q
和W
映射到W
,我就可以将错误的命令映射为正确的命令
我尝试了cmap Q
和cmap W
,但这也会影响搜索模式,即/Query
成为/Query
(实际上您无法键入较高的Q)
我还尝试了cabbrev Q
,这也会影响搜索模式
那么,还有其他命令可以满足我的要求吗
谢谢。在本例中,您可以定义一个用户命令,因为它以大写开头
:command! Q q
:command! W w
有很多方法可以做到这一点,但都不是很简单 使用
命令
您需要注意以下属性:
command! -nargs=* -complete=file -range=% -bang -bar W w
command! -bang -bar Q q
使用cabbrev
中描述了陷阱,因此您需要这样做:
cnoreabbrev W <C-r>=(getcmdtype()==':' && getcmdpos()==1 ? 'w' : 'W')<CR>
最安全的可能是
cabbrev
方式。在你想做类似:Q代码>,或:W file
谢谢您的回答,但它仍然有一些问题。我还想让:Wq
,:Wq
,:Wq
工作。所以我可能需要添加这三个命令。@zhiwei是的,您必须对它们中的每一个都执行相同的操作。恐怕没有捷径了。
function! s:CAbbrev(from, to)
execute 'cnoreabbrev ' . a:from . ' <C-r>=(getcmdtype()==#'':'' && getcmdpos()==1 ? ' . string(a:to) . ' : ' . string(a:from) . ')<CR>'
endfunction
cnoremap <nowait> <expr> W getcmdtype() ==# ':' && getcmdpos() == 1 ? 'w' : 'W'