vim - How to map a key in command-line mode but not in search mode -


i want map key in vim in command-line mode not in search mode(with leading /), below:

  • map q q
  • map w w

sometimes typed wrong command in vim, :q , :w, , want make these wrong commands right.

if can map q q , w w, can make wrong commands right.

i tried cmap q q , cmap w w, affect search mode, i.e. /query /query (actually can't type upper q).

and tried cabbrev q q, , affect search mode.

so, there other command can meet requirement?

thanks.

there number of ways it, , neither straightforward.

with command need take care of attributes:

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

with cabbrev pitfalls described in wiki, need this:

cnoreabbrev w <c-r>=(getcmdtype()==':' && getcmdpos()==1 ? 'w' : 'w')<cr> 

i have function purpose:

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

with cmap need <expr> qualifier, , need more or less same precautions cabbrev:

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

the safest cabbrev way.


Comments

Popular posts from this blog

c# - Validate object ID from GET to POST -

node.js - Custom Model Validator SailsJS -

php - Find a regex to take part of Email -