@DJMcMayhem 回答了您的直接问题。然而,这感觉不像 Vim,而且使用cmap
's 很棘手,因为它们会在意想不到的地方扩展(例如/<esc>q
)。
发出命令
制作一个执行此操作的命令非常容易。
command! -range=% -nargs=+ TemplateReplace keeppaterns <line1>,<line2>s/<args>/\=@*/gc
现在您可以执行此操作:TemplateReplace %%ARTICLE_DATE
,它将替换为"*
寄存器。
使用:s
和映射
使用从当前搜索模式创建替换命令的映射。
nnoremap gS :<c-u>%s//\=@*/gc<cr>
设置您的搜索模式(例如/%%ARTICLE_DATE
,然后使用gS
.
或者将寄存器作为参数:
nnoremap gS :<c-u>%s//\=getreg(v:register)/gc<cr>
用于"*gS
将当前搜索模式替换为寄存器的内容,本例为"*
寄存器。
视觉星图
使用如下的视觉星图来简化搜索模式的设置。
xnoremap * :<c-u>let @/=@"<cr>gvy:let [@/,@"]=[@",@/]<cr>/\V<c-r>=substitute(escape(@/,'/\'),'\n','\\n','g')<cr><cr>``
现在您可以直观地选择您的文本,然后使用它*
来设置搜索模式。
使用gn
动作
设置您的搜索模式(例如/%%ARTICLE_DATE
)然后执行cgn<c-r>*<esc>
。现在您可以使用n
和.
进行替换。
Vimcasts插曲:使用 gn 对搜索匹配进行操作。
这种方法也将受益于视觉星图。
使用 traces.vim 进行替换预览
Traces.vim将允许您在编写替换时预览替换。有点像'incsearch'
,但对于:s
. 这不会直接帮助您解决当前的问题,但可能会帮助您提供反馈并在将来发现错误。