我有一个相当复杂的正则表达式字符串来查找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
顺便说一句,我知道您可以在括号之前和之后删除。我只是以它为例。
答案 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的答案所暗示的那样。