如何在Vim中进行增量搜索,就像在Emacs中完成一样?

00p*_*eus 10 vim incremental-search

在vim中使用增量搜索时,光标会立即转到搜索词的下一个匹配项.Emacs具有类似的增量搜索功能.但是,有一个emacs isearch的功能,我觉得非常有用,我真的很想在vim中.在emacs中,如果键入:

<ctrl-s>word

它会立即转到"word",就像vim增量搜索一样.在emacs中,您现在可以键入其他内容<ctrl-s>以移至"word"的下一个结果事件,而在emacs中,这不会结束您的增量搜索会话.要在vim中执行相同操作,您必须点击<cr>,结束搜索词,然后点击n以转到下一个搜索结果.因为emacs不会结束搜索会话,所以您可以执行以下操作:

<ctrl-s>word<ctrl-s><ctrl-s>more

这样,一旦你靠近你想去的地方,你就可以"进入"你的搜索,结果非常有用!

有没有办法让vim做同样的事情?

xai*_*zek 15

最新版本的Vim提供了命令行模式的内置映射,可以完全按照您的需要进行操作.

你可以在帮助中找到这个:

CTRL-G

'incsearch'被设置时,进入用于搜索模式"/""?"并显示当前的匹配然后CTRL-G将移动到下一个匹配(不采取搜索偏移考虑在内).使用CTRL-T移动到前一个匹配.提示:在常规键盘T上方G.

修补程序编号以供参考,因为并非所有安装都具有映射:

  • 补丁2259年7月4日由Ctrl-N/ Ctrl-P像行为Ctrl-S/ Ctrl-R在Emacs.

  • 补丁7.4.2268将映射更改为Ctrl-G/ Ctrl-T(最初使用的映射具有不同的用途).


rom*_*inl 6

下面的两个映射让我点击<Tab><S-Tab>跳转到下一个或上一个匹配而不离开增量搜索:

" needed for mapping <Tab> in command-line mode
set wildcharm=<C-z>

cnoremap <expr> <Tab>   getcmdtype() == "/" \|\| getcmdtype() == "?" ? "<CR>/<C-r>/" : "<C-z>"
cnoremap <expr> <S-Tab> getcmdtype() == "/" \|\| getcmdtype() == "?" ? "<CR>?<C-r>/" : "<S-Tab>"
Run Code Online (Sandbox Code Playgroud)