Text vim搜索和附加/修改
有没有一种方法可以在vim中搜索文本,然后进行修改,而不仅仅是覆盖所述文本?i、 e.如果每个事件都匹配某个模式,我想用唯一的文本替换每个事件,部分基于匹配该模式的文本旁边的字符 具体来说,我想做以下几点: 我想用Text vim搜索和附加/修改,text,vim,replace,Text,Vim,Replace,有没有一种方法可以在vim中搜索文本,然后进行修改,而不仅仅是覆盖所述文本?i、 e.如果每个事件都匹配某个模式,我想用唯一的文本替换每个事件,部分基于匹配该模式的文本旁边的字符 具体来说,我想做以下几点: 我想用/\*.png替换与模式匹配的文本/\*.png alt=*title=\*,其中*是每种情况下都不同的文本。 提前谢谢 您可以使用命令行执行此操作。 在Linux中使用sed sed -i 's/\.png/\.png alt=* title=*/g' 在这里,它在.png上运行搜
/\*.png
替换与模式匹配的文本/\*.png alt=*title=\*
,其中*
是每种情况下都不同的文本。
提前谢谢 您可以使用命令行执行此操作。 在Linux中使用sed
sed -i 's/\.png/\.png alt=* title=*/g'
在这里,它在.png
上运行搜索,并替换为.png alt=*title=*
。
您必须在输入前使用反斜杠。因为它是一个特殊的字符。您可以使用命令行来实现这一点。 在Linux中使用sed
sed -i 's/\.png/\.png alt=* title=*/g'
在这里,它在.png
上运行搜索,并替换为.png alt=*title=*
。
您必须在输入前使用反斜杠。因为它是一个特殊字符。您可以使用子匹配将结果替换为部分匹配。例如,假设您有以下html:
您可以运行以下命令:
:%s/"\(.\{-}\)\.png"/"\1.png" title="\1" alt="\1"/g
\{-}
将匹配“在.png
部分之前的任意数量的字符,非贪婪”()及其周围的括号,\(
和\)
将其标记为捕获组,然后在替换中用作\1
(第一个捕获组)。运行此命令将为您提供:
现在,如果需要更复杂的替换,如将文件名转换为人类可读的字符串,可以使用\=
替换标志将字符串替换为任何表达式,如函数调用。例如,我们可以在上面的文本中运行以下内容:
:%s/title="\zs\(.\{-}\)\ze"/\=lib#CamelCase(submatch(1))/g
这使用了两种特定于Vim的模式:\zs
和\ze
。这些是“比赛开始”和“比赛结束”。将要搜索的是整个模式,title=…
。但是,将被替换的内容仅在\zs
和\ze
之间。这使得使用lib#CamelCase
的结果作为直接替换更加容易
请注意,这一次您不需要使用\(
/\)
括号,因为您可以使用子匹配(0)
进行“整个匹配”:
函数lib#CamelCase
是我自己的函数,实现方式如下:
function! lib#CamelCase(word)
return substitute(a:word, '_\(.\)', '\U\1', 'g')
endfunction
您可以编写任何接受一些输入并返回替换字符串的函数,执行您需要的任何操作
我不确定您对Vim和正则表达式的经验水平,因此很难给出具体的建议,Vim替换是一个大话题。我建议您仔细阅读以下帮助主题:
您可以运行以下命令:
:%s/"\(.\{-}\)\.png"/"\1.png" title="\1" alt="\1"/g
\{-}
将匹配“在.png
部分之前的任意数量的字符,非贪婪”()及其周围的括号,\(
和\)
将其标记为捕获组,然后在替换中用作\1
(第一个捕获组)。运行此命令将为您提供:
现在,如果需要更复杂的替换,如将文件名转换为人类可读的字符串,可以使用\=
替换标志将字符串替换为任何表达式,如函数调用。例如,我们可以在上面的文本中运行以下内容:
:%s/title="\zs\(.\{-}\)\ze"/\=lib#CamelCase(submatch(1))/g
这使用了两种特定于Vim的模式:\zs
和\ze
。这些是“比赛开始”和“比赛结束”。将要搜索的是整个模式,title=…
。但是,将被替换的内容仅在\zs
和\ze
之间。这使得使用lib#CamelCase
的结果作为直接替换更加容易
请注意,这一次您不需要使用\(
/\)
括号,因为您可以使用子匹配(0)
进行“整个匹配”:
函数lib#CamelCase
是我自己的函数,实现方式如下:
function! lib#CamelCase(word)
return substitute(a:word, '_\(.\)', '\U\1', 'g')
endfunction
您可以编写任何接受一些输入并返回替换字符串的函数,执行您需要的任何操作
我不确定您对Vim和正则表达式的经验水平,因此很难给出具体的建议,Vim替换是一个大话题。我建议您仔细阅读以下帮助主题: