在Vim中保留替代案例

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Vim中保留替代案例相关的知识,希望对你有一定的参考价值。

this可以在Vim完成吗?

我的意思是:搜索'BadJob'并替换为'GoodJob'将进行以下替换

'badjob' -> 'goodjob'  
'BadJob' -> 'GoodJob'  
'badJob' -> 'goodJob'  
'BADJOB' -> 'GOODJOB'
答案

使用abolish.vim

:%S/badjob/goodjob/g
另一答案

我不知道这是否是你正在寻找的那种解决方案......但我用过这个:keepcase.vim

在vim中没有其他支持......

另一答案

你可以的

:s/cbad/= strpart(submatch(0), 0 ,1) == toupper(strpart(submatch(0), 0, 1)) ? "GOOD" : "good"/

PS。我猜keepcase.vim封装了一些类似的逻辑:)

另一答案

你可以粘贴并调整它: (当然,如果你不时这样做,你会想要一个插件而不是这个怪物。但是对于一些匆忙而且只需要一次的人来说,这是一个快速破解你的粘贴乐趣:)

:%s/cbadzejob/= ( submatch(0)[0] is# toupper(submatch(0)[0]) ? 'G' : 'g' ) . ( submatch(0)[1] is# toupper(submatch(0)[1]) ? 'OOD' : 'ood' )

除了搜索模式,您还必须在替换代码中编辑四个'strings':以粗体编辑部分:

:%S / cbad zejob / = (submatch(0)[0]是#toupper(submatch(0)[0])?'G':'g')。 (submatch(0)[1]是#toupper(submatch(0)[1])?'OOD':'ood')

不要使用此“橙色”版本进行粘贴,因为其换行符也会破坏命令。

/ze是用于标记正向前瞻的vim正则表达式语法糖:检查ze之后的模式,但未替换。

is#?让我解释一下......(如果有兴趣的话。)

#(也在==#others)强制区分大小写。否则,使用:set ignorecase(我使用,因为这是有用的:set smartcase所需),vim将考虑'a' == 'A' !! 虽然很疯狂,但我们真的应该考虑到它:因为它依赖于用户设置,所以应该使用==! (除非那实际上是你想要的。)我甚至会在比较整数时遵循建议使用==#http://learnvimscriptthehardway.stevelosh.com/chapters/22.html#code-defensively

is#而不是==#是防御性编码的另一种方式:它提高了类型安全性:http://google.github.io/styleguide/vimscriptguide.xml?showone=Type_checking#Type_checking 在与字符串文字进行比较时应该使用它。

'single-quoted'而不是"double quoted" strings是另一个好习惯:http://google.github.io/styleguide/vimscriptguide.xml?showone=Strings#Strings

HT @fc。 - 这个答案建立在他们的answer,修复一些缺点。

另一答案

如果您只匹配一个精确的(不区分大小写)字符串和一些可能的大写字母,另一种可能性是:

:s/abc/={'abc':'xyz','Abc':'Xyz'}[submatch(0)]/i
另一答案

另一种keepcase插件是SmartCase - replacing words while keeping original case。 (不要因为评级不好而让自己灰心丧气。)

以上是关于在Vim中保留替代案例的主要内容,如果未能解决你的问题,请参考以下文章

oeasy教您玩转vim - 77 - # 保留环境viminfo

VIM 代码片段插件 ultisnips 使用教程

从零开始配置vim(27)——代码片段

从零开始配置vim(27)——代码片段

从零开始配置vim(27)——代码片段

inline内联函数