Vim中的案例保存替代品
这可以在Vim中完成吗?
我的意思是:search“BadJob”并replace为“GoodJob”将执行以下replace操作
'badjob' -> 'goodjob' 'BadJob' -> 'GoodJob' 'badJob' -> 'goodJob' 'BADJOB' -> 'GOODJOB'
使用abolish.vim :
:%S/badjob/goodjob/g
我不知道这是否是你正在寻找的解决scheme…但我已经使用这个: keepcase.vim
没有任何支持,否则在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' )
除search模式之外,您必须编辑replace代码中的四个'
string'
:以粗体编辑部分:
:%s / \ c bad \ ze job / \ =
(submatch(0)[0])是#toupper(submatch(0)[0])?' G ':' g ')。
(submatch(0)[1]是#toupper(submatch(0)[1])?' OOD ':' ood ')
不要使用这个“橙色”版本粘贴,因为它的换行符也会破坏命令。
/\ze
是vim正则expression式语法糖,用于标记正向:在\ze
之后的模式被检查,但不被replace。
is#
? 让我解释一下…(如果感兴趣的话)
#
(也在==#
和其他 )强制区分大小写。 否则,用:set ignorecase
(我使用,因为这是有用的:set smartcase
所需的),vim会考虑'a' == 'A'
!
疯狂的,我们真的应该考虑它:因为它是用户设置相关的, ==
应该使用NEVAR! (除了实际上是你想要的。)我甚至会按照build议使用==#
比较整数: http : //learnvimscriptthehardway.stevelosh.com/chapters/22.html#code-defensively
is#
而不是==#
是防御性编码的另一种方式:它提高了types安全性: http : //google.github.io/styleguide/vimscriptguide.xml? ==#
Type_checking
它应该用于比较string文字。
'single-quoted'
而不是"double quoted"
string是另一个好的做法: http : //google.github.io/styleguide/vimscriptguide.xml?showone=Strings#Strings
HT @fc。 – 这个答案build立在他们的答案上 ,修正了一些缺点。
keepcase插件的替代品是SmartCase – 在保留原始大小写的同时replace单词 。 (不要让自己被不好的评价劝阻)