ViM中的超级星(*)键将搜索光标下的单词并跳转到下一个匹配项.用户可以使用n
密钥跳转到下一个匹配项.如果hlsearch
启用,它还会突出显示匹配项.
我希望能够按*并获得突出显示的匹配,并能够使用n键导航匹配.但是,我不希望ViM在按下*时跳转到下一个匹配,它应该保留在当前单词上.有没有办法做到这一点?
mb1*_*b14 26
我会映射:
nnoremap * *``
Run Code Online (Sandbox Code Playgroud)
除了在跳转列表中添加跳转外,它的工作方式与您想要的完全相同.为了防止你需要:
nnoremap * :keepjumps normal *``<cr>
Run Code Online (Sandbox Code Playgroud)
我还没有看到这个:
nmap <silent> * "syiw<Esc>: let @/ = @s<CR>
它非常短,不涉及可能导致眨眼的跳跃。
说明:将光标所在的字复制到s
寄存器中,然后将搜索寄存器(/
)设置为寄存器的内容s
。搜索寄存器不可直接写入,这就是为什么需要 let 并因此silent
保持 vim 的命令行干净。
小智 6
最好的解决方案:
所以,试试插件:http://www.vim.org/scripts/script.php? script_id = 4355
比以下好多了:
" a jump adds to the jump list
nnoremap * *``
" I got a dead loop on macvim
nnoremap * :keepjumps normal *``<cr>
" the behavior is changed
nnoremap <silent> <Leader>* :let @/='\<<C-R>=expand("<cword>")<CR>\>'<CR>:set hls<CR>
Run Code Online (Sandbox Code Playgroud)
我发现这很好用,没有闪烁,也不需要中间寄存器。
nnoremap <silent> * :let @/= '\<' . expand('<cword>') . '\>' <bar> set hls <cr>
Run Code Online (Sandbox Code Playgroud)
或者,如果您想要这种g*
行为:
nnoremap <silent> g* :let @/=expand('<cword>') <bar> set hls <cr>
Run Code Online (Sandbox Code Playgroud)
我在.vimrc中有以下内容,我认为它比其他替代方案更好:
" Put word under cursor into search register and highlight
nnoremap <silent> <Leader>* :let @/='\<<C-R>=expand("<cword>")<CR>\>'<CR>:set hls<CR>
vnoremap <silent> <Leader>* :<C-U>
\let old_reg=getreg('"')<Bar>let old_regtype=getregtype('"')<CR>
\gvy:let @/=substitute(
\escape(@", '/\.*$^~['), '\_s\+', '\\_s\\+', 'g')<CR>
\gV:call setreg('"', old_reg, old_regtype)<CR>:set hls<CR>
Run Code Online (Sandbox Code Playgroud)
小智 5
如果要保留当前视图并将搜索添加到历史记录中,请尝试此[效率不高]解决方案:
noremap * msHmt`s*`tzt`s
Run Code Online (Sandbox Code Playgroud)
它正在使用标记s
(保存)和t
(顶部)。
归档时间: |
|
查看次数: |
7201 次 |
最近记录: |