Этот плагин, кажется, не работает для меня. Если мне нравится слово, BadJobи я хочу заменить его GoodJob, я не могу использовать %S/badjob/goodjob/g. Не удается обнаружить совпадение.
Роймунсон
@Roymunson Что вам нужно сделать, это:, %S/BadJob/GoodJob/gто команда Subvert переключится в смешанный режим и выполнит все подстановки, как указано в OP.
Шивамс
28
Я не знаю, если это то решение, которое вы ищете ... но я использовал это:
keepcase.vim
Да, с 2007 года::% SubstituteCase / \ cbadjob / GoodJob / g ^^
Люк Эрмит
Что значит с gVim 7.2? Я попробовал это в gVim 7.1 (12 мая 2007 г.), и он не работает :(
.
Нет, я добавил команду: SubstituteCase в плагин в 2007 году. Вот и все. Плагин доступен на vim.org, и он не поставляется с vim, как обычно, с большинством плагинов.
Люк Эрмитт
1. Это терпит неудачу, когда пользователь имеет :set ignorecase. 2. Badбудет заменен GOODвместо Good. 3. « job» часть вопроса игнорируется, поэтому она также заменит lambada→ lamgooda. Исправления и объяснения этих ошибок и несколько других вещей в моем ответе . (Также LOLOWLs!)
Аарон Тома
7
Вы можете просто вставить и адаптировать это: (Конечно, если вы будете делать это время от времени, вам понадобится плагин вместо этого чудовища. Но для тех, кто спешит и нуждается в нем только один раз, это быстрый взлом для вашего удовольствия
Помимо шаблона поиска, вы должны отредактировать четыре 'строки 'в коде замены: Редактировать части, выделенные жирным шрифтом :
:% 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 regex для обозначения положительного взгляда: шаблон после \zeпроверяется, но не подставляется.
is#?? Позвольте мне объяснить ... (Если интересно.)
#(также в ==#и другие ) обеспечивает соблюдение чувствительности к регистру. В противном случае, с :set ignorecase(который я использую, потому что это требуется для полезного :set smartcase), Vim будет рассматривать 'a' == 'A'!!
Как бы безумно это ни было, мы действительно должны это учитывать: поскольку оно зависит от пользовательских настроек, ==его НЕ следует использовать! (За исключением случаев, когда это действительно будет тем, что вы хотите.) Я даже буду следовать рекомендации, которую следует использовать ==#при сравнении целых чисел: http://learnvimscriptthehardway.stevelosh.com/chapters/22.html#code-defensively
Есть ли хитрость, чтобы сократить те, которые трудно запомнить и утомительно набирать команды, как :%s/file\A\?size/\=SmartCase("LastModifiedTime")/ig?
Михаэль Хартл,
@ MichaelHärtl: Вы можете использовать :SmartCaseкоманду. Я продлил это в моей собственной развилке . Обратите внимание, что это требует ingo-библиотеки в качестве зависимости.
Ответы:
Используйте abolish.vim :
источник
BadJob
и я хочу заменить егоGoodJob
, я не могу использовать%S/badjob/goodjob/g
. Не удается обнаружить совпадение.%S/BadJob/GoodJob/g
то команда Subvert переключится в смешанный режим и выполнит все подстановки, как указано в OP.Я не знаю, если это то решение, которое вы ищете ... но я использовал это: keepcase.vim
Там нет никакой поддержки в Vim ...
источник
конечно ты можешь
:s/\cbad/\= strpart(submatch(0), 0 ,1) == toupper(strpart(submatch(0), 0, 1)) ? "GOOD" : "good"/
пс. я предполагаю, что keepcase.vim заключает в себе похожую логику :)
источник
:set ignorecase
. 2.Bad
будет замененGOOD
вместоGood
. 3. «job
» часть вопроса игнорируется, поэтому она также заменитlambada
→lamgooda
. Исправления и объяснения этих ошибок и несколько других вещей в моем ответе . (Также LOLOWLs!)Вы можете просто вставить и адаптировать это:
(Конечно, если вы будете делать это время от времени, вам понадобится плагин вместо этого чудовища. Но для тех, кто спешит и нуждается в нем только один раз, это быстрый взлом для вашего удовольствия
:%s/\cbad\zejob/\= ( 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#
?? Позвольте мне объяснить ... (Если интересно.)#
(также в==#
и другие ) обеспечивает соблюдение чувствительности к регистру. В противном случае, с:set ignorecase
(который я использую, потому что это требуется для полезного:set smartcase
), Vim будет рассматривать'a' == 'A'
!!Как бы безумно это ни было, мы действительно должны это учитывать: поскольку оно зависит от пользовательских настроек,
==
его НЕ следует использовать! (За исключением случаев, когда это действительно будет тем, что вы хотите.) Я даже буду следовать рекомендации, которую следует использовать==#
при сравнении целых чисел: http://learnvimscriptthehardway.stevelosh.com/chapters/22.html#code-defensivelyis#
вместо этого==#
есть еще один способ защиты кода: он повышает безопасность типов: 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#StringsHT @fc. - этот ответ основывается на их ответе , исправляя несколько недостатков.
источник
Если вы сопоставляете только точную (независимую от регистра) строку с несколькими возможными заглавными буквами, другая возможность:
источник
Альтернативой плагину keepcase является SmartCase - замена слов при сохранении исходного регистра . (Не позволяйте себе быть обескураженным плохими оценками.)
источник
:%s/file\A\?size/\=SmartCase("LastModifiedTime")/ig
?:SmartCase
команду. Я продлил это в моей собственной развилке . Обратите внимание, что это требует ingo-библиотеки в качестве зависимости.