gpt4 book ai didi

vim - Gvim 中多种可能的查找替换

转载 作者:行者123 更新时间:2023-12-01 00:25:13 25 4
gpt4 key购买 nike

我想创建一个命令或函数来组合多个查找和替换。我尝试过以下命令:

command MyFR %s/first/1st/g | %s/second/2nd/g | %s/third/3rd/g

如果没有找到“第一个”或“第二个”,它会工作但中途停止。错误是:
E486: Pattern not found: <pattern>

即使文本中没有“第一个”,如何使此命令适用于要替换的“第二个”和“第三个”?谢谢你的帮助。

最佳答案

您可以添加 e每个替换命令的标志,在 :h :s_flags 中描述:

[e]     When the search pattern fails, do not issue an error message and, in
particular, continue in maps as if no error occurred. This is most
useful to prevent the "No match" error from breaking a mapping. Vim
does not suppress the following error messages, however:
Regular expressions can't be delimited by letters
\ should be followed by /, ? or &
No previous substitute regular expression
Trailing characters
Interrupted

它会给:
com! MyFR %s/first/1st/ge | %s/second/2nd/ge | %s/third/3rd/ge

另一种解决方案是将所有替换合并为一个:
com! MyFR %s/\vfirst|second|third/\={'first': '1st', 'second': '2nd', 'third': '3rd'}[tolower(submatch(0))]/g

这一次,在替换部分,您将使用表达式而不是使用文字字符串(请参阅 :h s/\= )。这里,表达式是字典的给定值。

字典的键是你所有可能匹配的文本,值是它们的替换。

您从字典中检索到的值是 tolower(submatch(0))它评估为匹配的文本(参见 :h submatch() ),在其小写版本中标准化(所有大写字符都通过 tolower() 转换为小写对应物)。

关于vim - Gvim 中多种可能的查找替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45532710/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com