Может ли это сделать в Vim?
Я имею в виду: поиск "BadJob" и замена с помощью "GoodJob" следующие замены
'badjob' -> 'goodjob' 'BadJob' -> 'GoodJob' 'badJob' -> 'goodJob' 'BADJOB' -> 'GOODJOB'
Может ли это сделать в Vim?
Я имею в виду: поиск "BadJob" и замена с помощью "GoodJob" следующие замены
'badjob' -> 'goodjob' 'BadJob' -> 'GoodJob' 'badJob' -> 'goodJob' 'BADJOB' -> 'GOODJOB'
Используйте abolish.vim:
:%S/badjob/goodjob/g
Я не знаю, это то решение, которое вы ищете... но я использовал это: keepcase.vim
В vim нет никакой поддержки...
уверенный u может
:s/\cbad/\= strpart(submatch(0), 0 ,1) == toupper(strpart(submatch(0), 0, 1)) ? "GOOD" : "good"/
пс. Я предполагаю, что 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 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'
!!
Сумасшедший, так это, мы действительно должны учитывать его: поскольку он зависит от пользователя, ==
должен использоваться 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. - этот ответ основывается на ответе , фиксируя несколько недостатков.
Альтернативой плагину keepcase является SmartCase - замена слов при сохранении оригинального случая. (Не позволяйте себе отвлекаться на плохие оценки.)