Замена заметок в Vim

Может ли это сделать в Vim?

Я имею в виду: поиск "BadJob" и замена с помощью "GoodJob" следующие замены

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

Ответ 1

Используйте abolish.vim:

:%S/badjob/goodjob/g

Ответ 2

Я не знаю, это то решение, которое вы ищете... но я использовал это: keepcase.vim

В vim нет никакой поддержки...

Ответ 3

уверенный u может

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

пс. Я предполагаю, что keepcase.vim инкапсулирует некоторую аналогичную логику:)

Ответ 4

Вы можете просто вставить и адаптировать это:
(Конечно, если вы делаете это время от времени, вам понадобится плагин вместо этого чудовища. Но для тех, кто спешит и ему нужен только один раз, это быстрый взлом для удовольствия от вставки: )суб >

:%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 bad\ze задание/\ =
(подстановка (0) [0] - # toupper (подделка (0) [0])? ' G': ' g').
(подстановка (0) [1] - # toupper (подделка (0) [1])? ' OOD': ' ood')

Не используйте эту "оранжевую" версию для вставки, так как ее символы прерывания также нарушают команду.

/\ze - синтаксический сахар vime regex для маркировки положительного взгляда: шаблон после \ze проверяется, но не заменяется.


is#?? Позвольте мне объяснить... (если интересно).

# (также в ==# и другие) обеспечивает чувствительность к регистру. В противном случае с :set ignorecase (который я использую, потому что это необходимо для полезного :set smartcase), vim рассмотрит 'a' == 'A'!!
99eI5.jpgUE9qp.jpgZeij0.jpg
Сумасшедший, так это, мы действительно должны учитывать его: поскольку он зависит от пользователя, == должен использоваться NEVAR! (За исключением тех случаев, когда это действительно будет то, что вы хотите.) Я буду даже следуйте рекомендациям использовать ==# при сравнении целых чисел: 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" строки являются еще одной хорошей практикой: http://google.github.io/styleguide/vimscriptguide.xml?showone=Strings#Strings


HT @fc. - этот ответ основывается на ответе , фиксируя несколько недостатков.