Vim - 如何使用命令进行正则表达式匹配的可视化选择?

11

不知道如何在可视模式下自动选择正则表达式匹配项。

例如,手动地,我可以搜索一个单词

/word

这会将光标定位在匹配"word"的第一个字符上。
然后我按下 v 进入可视模式,并按下 llll 选择整个 "word"。

现在我想通过宏来完成这个操作,但事先不知道匹配的长度。

我期望 Vim 自动在当前匹配的开头和结尾定义一些内置标记,这样我就可以用 ` 跳转到它们。但我找不到任何相关的信息。

我的目的是重新指定 Ctrl+n 到一个宏,以便在可视模式下前往下一个匹配并选择它,即不仅仅是高亮显示匹配项。(类似于 n 命令跳转到下一个匹配项的功能。)

如果你想知道为什么,那是因为我想基于正则表达式匹配(像 Ctrl+nzf)创建折叠,但我相信这对其他情况也很有用。

3个回答

7

为了方便未来遇到此问题的人,现在vim已经内置了这个功能:gn(和它的近亲gN)会跳到下一个(分别是上一个)匹配项并进行可视化选择。它也可以用作运动;例如:cgn将跳到下一个匹配项并将其更改。


7

//e会带您到上次搜索的结束字符。 更多信息--:help {offset}。

您可以在这里找到如何恢复旧的搜索缓冲区。


这对我来说非常有效,谢谢。noremap的东西没有起作用(或者可能不是我需要的方式?) - Jay Taylor

6
:noremap <C-n> //s<CR>v//e+1<CR>

编辑摘要:原本使用了//e,但是//e+1对我起到了作用(也选中了匹配结果的最后一个字符)。

这正是我所需要的(除了试错后发现//e+1将我带到了匹配的最后一个字符之后的边界;已编辑)。太棒了!在自己找不到的情况下,我原本以为要做我想要的事情会很棘手。 - Evgeni Sergeev
1
我明白了。当'selection'选项设置为inclusive时,上面的//e有效。当它设置为exclusive时,//e+1有效。我使用:behave mswin来将'selection'设置为exclusive - Evgeni Sergeev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接