在VIM中存储搜索字符串?

时间:2019-07-01 14:42:32

标签: search vim

我有一个相当复杂的正则表达式字符串来查找IP地址(25 [0-5] | 2 [0-4] [0-9] | [0-1] [0-9] {2} | [0 -9] {1,2}等。) 例如,如果要获取IP地址的所有实例,则必须删除该实例之前的行中的所有内容,而在第二次调用中,必须删除该实例之后的所有内容。有没有一种方法可以将搜索字符串存储为变量以用于多次替换?

例如:

    Store the string in register "a"
:y a 25[0-5]|2[0-4][0-9]|[0-1][0-9]{2}|[0-9]{1,2}\. . .
    Refer back to register "a" when deleting everything before the address
:%s/^.*(\a)/\1/g
    And again when deleting everything after it
:%s/(\a).*$/\1/g

顺便说一句,我知道您可以在括号之前和之后删除。我只是以它为例。

2 个答案:

答案 0 :(得分:1)

您可以使用 Ctrl-R 将寄存器的内容插入命令行。来自:help c_CTRL-R

CTRL-R {0-9a-z"%#:-=.}                                  c_CTRL-R c_<C-R>
            Insert the contents of a numbered or named register.  Between
            typing CTRL-R and the second character '"' will be displayed
            to indicate that you are expected to enter the name of a
            register.

还有一个相关的Ctrl-RCtrl-R command可能会更好,如果您的寄存器中有某些不寻常的字符。

答案 1 :(得分:0)

我的TaggedSearchPattern plugin可以在搜索模式本身上添加特殊的中性标签,以便可以在搜索历史记录(:help q/)中轻松识别它,并且还具有仅查看已标记的标签的映射。搜索。这样,您就不需要将模式存储在单独的Vim变量中,就像8bittree的答案所暗示的那样。