Pode isso pode ser feito no vim?
O que quero dizer é: procurar 'BadJob' e substituir por 'GoodJob' faria as seguintes substituições
'badjob' -> 'goodjob' 'BadJob' -> 'GoodJob' 'badJob' -> 'goodJob' 'BADJOB' -> 'GOODJOB'
Pode isso pode ser feito no vim?
O que quero dizer é: procurar 'BadJob' e substituir por 'GoodJob' faria as seguintes substituições
'badjob' -> 'goodjob' 'BadJob' -> 'GoodJob' 'badJob' -> 'goodJob' 'BADJOB' -> 'GOODJOB'
Respostas:
Use abolish.vim :
:%S/badjob/goodjob/g
BadJobe quero substituí-la GoodJob, não posso usá-la %S/badjob/goodjob/g. Falha ao detectar uma correspondência.
%S/BadJob/GoodJob/go seguinte:, o comando Subvert mudará para o modo de maiúsculas e minúsculas e fará todas as subestações fornecidas pelo OP.
Não sei se esse é o tipo de solução que você está procurando ... mas usei isso: keepcase.vim
Caso contrário, não há suporte no vim ...
com certeza você pode
:s/\cbad/\= strpart(submatch(0), 0 ,1) == toupper(strpart(submatch(0), 0, 1)) ? "GOOD" : "good"/
ps. Eu estou supondo keepcase.vim encapsula alguma lógica semelhante :)
:set ignorecase. 2. Badserá substituído por em GOODvez de Good. 3. A jobparte " " da pergunta é ignorada, então isso também substituirá lambada→ lamgooda. Correções e explicações para esses erros e algumas outras coisas na minha resposta . (Também LOLOWLs!)
Você pode simplesmente colar e adaptar o seguinte:
(é claro, se você fizer isso de vez em quando, desejará um plugin em vez dessa monstruosidade. para o seu prazer de colar :)
:%s/\cbad\zejob/\= ( submatch(0)[0] is# toupper(submatch(0)[0]) ? 'G' : 'g' ) . ( submatch(0)[1] is# toupper(submatch(0)[1]) ? 'OOD' : 'ood' )
Além do padrão de pesquisa, você deve editar as quatro 'cadeias 'no código de substituição: Edite as peças em negrito :
:% s / \ c trabalho \ ze ruim / \ = (submatch (0) [0] é # toupper (submatch (0) [0])? ' G ': ' g '). (submatch (0) [1] é # toupper (submatch (0) [1])? ' OOD ': ' ood ')
Não use esta versão 'laranja' para colar, pois seus caracteres de quebra de linha também quebrarão o comando.
/\zeé o açúcar sintático do vim regex para marcar um lookahead positivo: o padrão após \zeé verificado, mas não substituído.
is#?? Deixe-me explicar ... (Se estiver interessado.)
#(também em ==#e outros ) reforça a distinção entre maiúsculas e minúsculas. Caso contrário, com :set ignorecase(o qual eu uso, porque isso é necessário para o útil :set smartcase), o vim considerará 'a' == 'A'!!

Por mais louco que seja, devemos realmente ==prestar contas: como é dependente das configurações do usuário, o NEVAR deve ser usado! (Exceto onde realmente seria o que você deseja.) Eu seguirei a recomendação a ser usada ==#ao comparar números inteiros: http://learnvimscriptthehardway.stevelosh.com/chapters/22.html#code-defensively
is#em vez de, ==#é outra maneira de codificar defensivamente: melhora a segurança de tipos: http://google.github.io/styleguide/vimscriptguide.xml?showone=Type_checking#Type_checking
Deve ser usado ao comparar com um literal de cadeia de caracteres.
'single-quoted'em vez de "double quoted" seqüências de caracteres, é outra boa prática: http://google.github.io/styleguide/vimscriptguide.xml?showone=Strings#Strings
HT @fc. - esta resposta baseia-se na resposta deles , corrigindo algumas deficiências.
Uma alternativa ao plugin keepcase é o SmartCase - substituindo palavras, mantendo o caso original . (Não se deixe desencorajar pelas más classificações.)
:%s/file\A\?size/\=SmartCase("LastModifiedTime")/ig?
:SmartCasecomando. Eu estendi isso no meu próprio garfo . Observe que isso requer ingo-library como uma dependência.