ViM:搜索并突出显示但不要跳转

Ash*_*ppa 43 vim search

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)

  • 第二个对我不起作用,当我按*它说:"E169:命令过于递归" (19认同)
  • 我还必须将其修改为:`nnoremap*:keepjumps normal!mi*\`i <CR>`因为出于某种原因,`\`\``没有按预期工作. (14认同)
  • 你需要在第二个中使用`normal!`.`normal`是'normal!',因为`nmap`是'nnoremap` (2认同)
  • 首先`normal`应该改为`normal!`。其次,keepjumps 不会设置````` 标记。我用```nnoremap * m`:keepjumps正常!*``&lt;cr&gt;```。一个稍微不同的方法是做 ```nnoremap * m`:keepjumps 正常!*&lt;cr&gt;````` (2认同)

Seb*_*ask 7

我还没有看到这个:

nmap <silent> * "syiw<Esc>: let @/ = @s<CR>

它非常短,不涉及可能导致眨眼的跳跃。

说明:将光标所在的字复制到s寄存器中,然后将搜索寄存器(/)设置为寄存器的内容s。搜索寄存器不可直接写入,这就是为什么需要 let 并因此silent保持 vim 的命令行干净。


小智 6

最好的解决方案:

  1. 不要在跳转列表中添加跳转
  2. 星号键的行为不会改变

所以,试试插件: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)


Uri*_*Uri 6

我发现这很好用,没有闪烁,也不需要中间寄存器。

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)


Jee*_*eet 5

我在.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(顶部)。