Answers:
我不知道这是否是您正在寻找的解决方案...但是我已经使用了: keepcase.vim
否则,没有其他支持。
当然可以
:s/\cbad/\= strpart(submatch(0), 0 ,1) == toupper(strpart(submatch(0), 0, 1)) ? "GOOD" : "good"/
ps。我猜想keepcase.vim封装了一些类似的逻辑:)
您可以粘贴并修改它:(
当然,如果您不时这样做,您将需要一个插件而不是这种怪诞的功能。但是对于一些急于只需要一次的人来说,这是一个快速的技巧。为了您的粘贴乐趣:)
:%s/\cbad\zejob/\= ( submatch(0)[0] is# toupper(submatch(0)[0]) ? 'G' : 'g' ) . ( submatch(0)[1] is# toupper(submatch(0)[1]) ? 'OOD' : 'ood' )
除了搜索模式,您还必须编辑替换代码中的四个'
字符串'
:用粗体编辑部分:
:%s / \ c 错误的 \ ze 作业 / \ =
(submatch(0)[0] is#toupper(submatch(0)[0])?' G ':' g ')。
(submatch(0)[1] is#toupper(submatch(0)[1])?' OOD ':' ood ')
请勿使用此“橙色”版本进行粘贴,因为其换行符也会破坏命令。
/\ze
是vim regex语法糖,用于标记正向前瞻:\ze
检查后的模式,但不能替代。
is#
?? 让我解释一下...(如果有兴趣。)
#
(以及in ==#
和其他)强制区分大小写。否则,:set ignorecase
(我会使用它,因为这对于有用的功能是必需的:set smartcase
),vim将考虑使用'a' == 'A'
!!
如此疯狂,我们真的应该考虑一下:因为它取决于用户设置,所以==
应该使用NEVAR! (除非实际上是您想要的。)==#
在比较整数时,我什至会遵循建议使用:http : //learnvimscriptthehardway.stevelosh.com/chapters/22.html#code-defensively
is#
而不是==#
另一种防御性编码方式:改进了类型安全性:http : //google.github.io/styleguide/vimscriptguide.xml?showone=Type_checking#Type_checking
Type_checking与字符串文字进行比较时应使用它。
'single-quoted'
代替"double quoted"
字符串是另一种好的做法:http : //google.github.io/styleguide/vimscriptguide.xml?showone=Strings#Strings
HT @fc。-此答案以他们的答案为基础,并修复了一些缺点。
keepcase插件的替代方法是SmartCase-在保留原始大小写的同时替换单词。(不要让自己对不良评分感到沮丧。)
:%s/file\A\?size/\=SmartCase("LastModifiedTime")/ig
?