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
BadJob
e quero substituí-la GoodJob
, não posso usá-la %S/badjob/goodjob/g
. Falha ao detectar uma correspondência.
%S/BadJob/GoodJob/g
o 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. Bad
será substituído por em GOOD
vez de Good
. 3. A job
parte " " 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
?
:SmartCase
comando. Eu estendi isso no meu próprio garfo . Observe que isso requer ingo-library como uma dependência.