这个可以在 Vim 中完成吗?
我的意思是: 搜索“坏工作” 换成“好工作”就行了 以下替代品 'badjob' -> 'goodjob' 'BadJob' -> 'GoodJob' 'badJob' -> 'goodJob' 'BADJOB' -> 'GOODJOB'
我的意思是: 搜索“坏工作” 换成“好工作”就行了 以下替代品
'badjob' -> 'goodjob' 'BadJob' -> 'GoodJob' 'badJob' -> 'goodJob' 'BADJOB' -> 'GOODJOB'
我不知道这是不是你想要的解决办法,但我用过这个: 留着吧 Vim
没有任何支持,否则在 Vim..。
你当然可以
:s/\cbad/\= strpart(submatch(0), 0 ,1) == toupper(strpart(submatch(0), 0, 1)) ? "GOOD" : "good"/
我猜 Keepcase.vim 封装了一些类似的逻辑:)
保管箱插件的一个替代品是 SmartCase-替换单词同时保留原来的大小写。(不要因为收视率低而泄气。)
使用 废除:
:%S/badjob/goodjob/g
对于大多数(非复杂的)案例,我推荐@ramion 的 回答而不是我的。 如果你有时间,我的帖子可能还是值得的。提高您对脚本陷阱的认识。
你可以粘贴并调整这个: (当然,如果你时不时这样做,你会想要一个插件,而不是这个怪物。但是对于一些急于求成而且只需要一次的人来说,这是一个快速解决粘贴快感的方法:)
:% s/cbad zejob/= (submatch (0)[0]是 # toupper (submatch (0)[0]) ? ‘ G’: ‘ g’)。(submatch (0)[1]是 # toupper (submatch (0)[1]) ? ‘ OOD’: ‘ OOD’)
除了搜索模式之外,还必须在替换代码中编辑4个 'strings': 编辑 大胆中的部分:
'
:% s/c很糟糕 ze工作/= (submatch (0)[0]是 # toupper (submatch (0)[0]) ? ‘ G’: ‘ 克’)。 (submatch (0)[1]是 # toupper (submatch (0)[1]) ? ‘ 值日官’: ‘ 很好’)
不要使用这个“橙色”版本粘贴,因为它的换行符也会破坏命令。
/\ze 是 vim regex 语法糖,用于标记正面的前瞻: 检查 \ze之后的模式,但不替换。
/\ze
\ze
#(同样在 ==#和 其他人中)执行大小写敏感性。否则,使用 :set ignorecase(我使用它,因为这是有用的 :set smartcase所必需的) ,vim 将考虑使用 'a' == 'A'! ! < img src = “ https://i.stack.imgur.com/UE9qp.jpg”height = “140”> < img src = “ https://i.stack.imgur.com/Zeij0.jpg”height = “140”> 尽管这很疯狂,但我们确实应该考虑到这一点: 因为它是依赖于用户设置的,==应该使用 NEVAR!(除非它实际上是您想要的。)在比较整数时,我甚至会遵循使用 ==#的建议: < a href = “ http://learnvimscriptthehardway.stevelosh.com/lessons/22.html # code-Defense”rel = “ nofollow norefrer”> http://learnvimscriptthehardway.stevelosh.com/chapters/22.html#code-defensively
#
==#
:set ignorecase
:set smartcase
'a' == 'A'
==
is# 代替 ==#是另一种防御性编码方式: 它提高了类型安全性: < a href = “ http://google.github.io/styleguide/vimscriptguide.xml? showone = Type _ check # Type _ check”rel = “ nofollow norefrer”> http://google.github.io/styleguide/vimscriptguide.xml?showone=type_checking#type_checking 当与字符串文字进行比较时,应该使用它。
is#
'single-quoted'代替 "double quoted" 绳子是另一种好的做法: http://google.github.io/styleguide/vimscriptguide.xml?showone=Strings#Strings
'single-quoted'
"double quoted"
如果您只匹配一个精确的(与大小写无关的)字符串和一些可能的大小写,那么另一种可能性是:
:s/abc/\={'abc':'xyz','Abc':'Xyz'}[submatch(0)]/i
关于什么
:%s/\Cbadjob/goodjob/ :%s/\CBadJob/GoodJob/ :%s/\CbadJob/goodJob/ :%s/\CBADJOB/GOODJOB/
见: https://stackoverflow.com/a/2287449/5599687