Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何像在Emacs中一样在Vim中进行增量搜索?_Vim_Incremental Search - Fatal编程技术网

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

如何像在Emacs中一样在Vim中进行增量搜索?,vim,incremental-search,Vim,Incremental Search,在vim中使用增量搜索时,光标会立即转到您键入的下一个搜索词。Emacs具有类似的增量搜索功能。然而,我发现emacs isearch的一个特性非常有用,这是我非常希望在vim中使用的。在emacs中,如果键入: word 它会立即转到“word”,就像vim增量搜索一样。在emacs中,您现在可以键入额外的移动到“word”的下一个结果出现处,而在emacs中,这不会结束增量搜索会话。要在vim中执行相同操作,必须点击,以结束搜索项,然后点击n以转到下一个搜索结果。由于emacs不会结束搜索会

在vim中使用增量搜索时,光标会立即转到您键入的下一个搜索词。Emacs具有类似的增量搜索功能。然而,我发现emacs isearch的一个特性非常有用,这是我非常希望在vim中使用的。在emacs中,如果键入:

word

它会立即转到“word”,就像vim增量搜索一样。在emacs中,您现在可以键入额外的
移动到“word”的下一个结果出现处,而在emacs中,这不会结束增量搜索会话。要在vim中执行相同操作,必须点击
,以结束搜索项,然后点击
n
以转到下一个搜索结果。由于emacs不会结束搜索会话,因此可以执行以下操作:

wordmore

一旦你更接近你想去的地方,这会让你在搜索中“回家”,结果证明这是非常有用的


有没有办法让vim也这样做?

您可以使用键映射:

nnoremap <C-s> /<Up>
nnoremap/
(对于正常模式)

如果您想保持上一场比赛的状态(而不是移动到下一场比赛),您可以在
/
之后返回上一场比赛:

nnoremap N/
用法:

  • /word
    -开始搜索
    word
  • n
    ,…,
    n
    -移动到下一个匹配项
  • ,即
    控件+s
    -调用上一次搜索(1)
  • 键入
    more
    -开始搜索
    /wordmore
  • 出于同样的想法:

    :cnoremap <c-s> <cr>/<up>
    
    :cnoremap/
    

    使用此映射,在搜索过程中使用Ctrl-L更为有用。

    下面的两个映射允许我点击
    跳转到下一个或上一个匹配,而不离开增量搜索:

    " 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>"
    
    在命令行模式下映射所需的“
    ”
    设置野趣=
    cnoremap getcmdtype()
    cnoremap getcmdtype()
    
    Vim的最新版本提供了命令行模式的内置映射,以完全满足您的需要

    您可以在以下内容中找到:

    CTRL-G

    当设置了
    'incsearch'
    时,输入
    的搜索模式“/”
    “?”
    并显示当前匹配项,然后CTRL-G将移动到下一个匹配项(不考虑搜索偏移量)。使用CTRL-T移动到上一个匹配项。提示:在常规键盘上,T高于G

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

    • 补丁7.4.2259使Ctrl-N/Ctrl-p的行为类似于Emacs中的Ctrl-S/Ctrl-R

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


    这个顺序如何:1)
    /word
    ,2)
    ,3)
    n
    ,…,
    n
    ,4)
    //code>,5,
    ?您将返回到搜索命令,即
    /word
    。然后您可以继续输入
    更多的
    。是的,这很有效(大致就是我现在所做的),只是它不如emacs版本方便。Vim应该在任何时候都比emacs更方便!;-)当然,最难的部分是点击
    ,您可以使用
    /
    插入包含以前搜索项的搜索寄存器。“/”-启动搜索“Ctrl-l”-使用光标后的字符(类似于emacs中的“Ctrl-w”)我也尝试添加了
    :cnoremap n/
    ,这样我就可以在不退出搜索的情况下点击
    ctrl-s
    进入下一场比赛,但一次会跳转两个结果。你知道如何避免吗?@00prometheus,
    nnoremap n/
    ?@yolenoyer找到了答案;看看他的答案!@00prometheus,his解决方案对我不起作用。但我的映射工作原理与问题中描述的一样。奇怪的是,它对我起作用。我现在在.vimrc中使用
    nnoremap/
    cnoremap/
    ,它工作得很好!现在我只需要找到一个用于反向isearch的免费键!:-)我也尝试过,但当我这样做时,搜索跳了两步每次结果。您是否得到不同的结果?如果您将@Ruslans的映射更改为
    nnoremap/
    ,那么它似乎也能工作!getcmdtype条件映射与普通键映射相比有什么优势?这比我习惯的更深入到vim中:-)现在,我有
    nnoremap/
    cnoremap/
    cnoremap?
    ,在my.vimrc中。它允许我使用ctrl-s前进,ctrl-z后退。@00prometheus:这是对xaizek对旧版本Vim的回答的一个很好的模拟。如果在第一个
    之后添加
    zv
    ,它也会在需要时打开折叠。例如
    cnoremap getcmdtype()==“/”\ \124; \\ 124; getcmdtype()==“?”?“zv/”:““
    我升级了vim,这很有效!然而,yolenoyer和Ruslan的键映射实际上更好:它们让我继续旧的搜索!Ctrl-T/Ctrl-G不允许我附加到上一次搜索,这是我想要的核心。@00prometheus你说不能附加到上一次搜索是什么意思?模式对我来说保持不变,我可以继续编辑它。对不起,我现在知道了!只需进行搜索,点击
    /
    ,然后输入更多内容到主页,而无需离开搜索。完美的
    " 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>"