vim:切换模式时保持光标位置

时间:2015-12-09 16:53:29

标签: vim

我正在尝试重新映射F1键以删除搜索突出显示。这在普通模式下很简单:

nmap <F1> :noh<CR>

但在插入模式下它有点棘手。我能做到

imap <F1> <ESC>:noh<CR>i

但是这会导致光标向后移动一个插槽。一个小小的烦恼,但仍然是一个烦恼。我已尝试添加<RIGHT>,但如果我在i之前执行此操作,如果我在当前结束时将转移到下一行,并且如果我在此之后执行此操作i如果我在行的开头,它将转移到第二个字符。

有没有办法让它做我想做的事情?真的我想要的是F1键在所有模式中删除搜索突出显示。不要太在意如何发生这种情况,因此有更好的解决方案,请告诉我。

2 个答案:

答案 0 :(得分:5)

如果您不希望光标移动,请避免使用<esc>。请改用<c-o>

" NB: this mapping doesn't remove, but toggles search highlighting,
" which is often much more useful

" Normal Mode
nnoremap <silent> <F8> :set hlsearch!<bar>set hlsearch?<CR>
" Insert Mode
imap     <silent> <F8> <c-o><F8>
" (strict?) Visual Mode (i.e Select Mode is excluded)
xmap     <silent> <F8> <c-\><c-n><F8>gv
" Select Mode
smap     <silent> <F8> <c-\><c-n><F8>gv<c-g>

答案 1 :(得分:4)

您可以使用<C-o>从插入模式执行单个命令:

imap <F1> <C-o>:noh<CR>