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

ewo*_*wok 2 vim

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

nmap <F1> :noh<CR>
Run Code Online (Sandbox Code Playgroud)

但在插入模式下它有点棘手.我可以

imap <F1> <ESC>:noh<CR>i
Run Code Online (Sandbox Code Playgroud)

但这会导致光标向后移动一个插槽.一个小小的烦恼,但仍然是一个烦恼.我已经尝试添加了一个<RIGHT>,但是如果我在它之前i它会转移到下一行,如果我在当前的那一行结束,如果我这样做,i它会转移到第二个字符,如果我' m在行的开头.

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

Luc*_*tte 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>
Run Code Online (Sandbox Code Playgroud)

  • 你不需要`nmap`,已经有`nnoremap`说:"我不依赖其他映射,不怕干扰".关于`:xmap`,你必须转义(`<C - \> <Cn>`)然后重新选择(`gv`).关于`:smap`,需要用`gv <cg>来实现重选 (2认同)