Ce plugin ne semble pas fonctionner pour moi. Si j'aime un mot BadJobet que je veux le remplacer par GoodJob, je ne peux pas l'utiliser %S/badjob/goodjob/g. Il ne parvient pas à détecter une correspondance.
Roymunson
@Roymunson Ce que vous devez faire est ceci:, %S/BadJob/GoodJob/galors la commande Subvert passera en mode casse mixte et effectuera toutes les sous-stations comme indiqué par OP.
shivams le
28
Je ne sais pas si c'est le genre de solution que vous recherchez ... mais j'ai utilisé ceci:
keepcase.vim
Oui, depuis 2007::% SubstituteCase / \ cbadjob / GoodJob / g ^^
Luc Hermitte
Signification depuis gVim 7.2? Je l'ai essayé dans gVim 7.1 (12-mai-2007) et ça n'a pas fonctionné :(
fc.
Non, j'ai ajouté la commande: SubstituteCase au plugin en 2007. C'est tout. Le plugin est disponible sur vim.org, et il n'est pas livré avec vim comme d'habitude avec la plupart des plugins.
Luc Hermitte
1. Cela échoue lorsque l'utilisateur a :set ignorecase. 2. Badsera remplacé par GOODau lieu de Good. 3. La jobpartie " " de la question est ignorée, elle remplacera donc également lambada→ lamgooda. Corrections et explications de ces bugs et quelques autres choses dans ma réponse . (Aussi LOLOWLs!)
Aaron Thoma
7
Vous pouvez simplement coller et adapter ceci: (Bien sûr, si vous faites cela de temps en temps, vous voudrez un plugin au lieu de cette monstruosité. Mais pour certains qui sont pressés et n'en ont besoin qu'une seule fois, c'est un hack rapide pour votre plaisir de coller :)
#(également dans ==#et autres ) applique la sensibilité à la casse. Sinon, avec :set ignorecase(que j'utilise, car cela est nécessaire pour l'utile :set smartcase), vim prendra en compte 'a' == 'A'!!
Aussi fou que cela soit, nous devrions vraiment en tenir compte: comme il dépend des paramètres de l'utilisateur, ==si NEVAR doit être utilisé! (Sauf là où ce serait réellement ce que vous voulez.) Je suivrai même la recommandation à utiliser ==#lors de la comparaison des entiers: http://learnvimscriptthehardway.stevelosh.com/chapters/22.html#code-defensively
Existe-t-il une astuce pour raccourcir les commandes difficiles à retenir et fastidieuses à saisir :%s/file\A\?size/\=SmartCase("LastModifiedTime")/ig?
Michael Härtl
@ MichaelHärtl: Vous pouvez utiliser la :SmartCasecommande. J'ai étendu cela dans ma propre fourchette . Notez que cela nécessite ingo-library en tant que dépendance.
Réponses:
Utilisez abolish.vim :
la source
BadJob
et que je veux le remplacer parGoodJob
, je ne peux pas l'utiliser%S/badjob/goodjob/g
. Il ne parvient pas à détecter une correspondance.%S/BadJob/GoodJob/g
alors la commande Subvert passera en mode casse mixte et effectuera toutes les sous-stations comme indiqué par OP.Je ne sais pas si c'est le genre de solution que vous recherchez ... mais j'ai utilisé ceci: keepcase.vim
Il n'y a pas de support autrement dans vim ...
la source
sûr que tu peux
:s/\cbad/\= strpart(submatch(0), 0 ,1) == toupper(strpart(submatch(0), 0, 1)) ? "GOOD" : "good"/
ps. Je suppose que keepcase.vim encapsule une logique similaire :)
la source
:set ignorecase
. 2.Bad
sera remplacé parGOOD
au lieu deGood
. 3. Lajob
partie " " de la question est ignorée, elle remplacera donc égalementlambada
→lamgooda
. Corrections et explications de ces bugs et quelques autres choses dans ma réponse . (Aussi LOLOWLs!)Vous pouvez simplement coller et adapter ceci:
(Bien sûr, si vous faites cela de temps en temps, vous voudrez un plugin au lieu de cette monstruosité. Mais pour certains qui sont pressés et n'en ont besoin qu'une seule fois, c'est un hack rapide pour votre plaisir de coller :)
:%s/\cbad\zejob/\= ( submatch(0)[0] is# toupper(submatch(0)[0]) ? 'G' : 'g' ) . ( submatch(0)[1] is# toupper(submatch(0)[1]) ? 'OOD' : 'ood' )
Outre le modèle de recherche, vous devez éditer les quatre
'
chaînes'
du code de remplacement: Modifiez les parties en gras :N'utilisez pas cette version «orange» pour coller, car ses caractères de saut de ligne interrompront également la commande.
/\ze
est un sucre syntaxique vim regex pour marquer une anticipation positive: Le modèle après\ze
est vérifié, mais pas remplacé.is#
?? Laissez-moi vous expliquer… (Si vous êtes intéressé.)#
(également dans==#
et autres ) applique la sensibilité à la casse. Sinon, avec:set ignorecase
(que j'utilise, car cela est nécessaire pour l'utile:set smartcase
), vim prendra en compte'a' == 'A'
!!Aussi fou que cela soit, nous devrions vraiment en tenir compte: comme il dépend des paramètres de l'utilisateur,
==
si NEVAR doit être utilisé! (Sauf là où ce serait réellement ce que vous voulez.) Je suivrai même la recommandation à utiliser==#
lors de la comparaison des entiers: http://learnvimscriptthehardway.stevelosh.com/chapters/22.html#code-defensivelyis#
au lieu de==#
est une autre façon de coder défensivement: Cela améliore la sécurité des types: http://google.github.io/styleguide/vimscriptguide.xml?showone=Type_checking#Type_checkingIl doit être utilisé lors de la comparaison avec une chaîne littérale.
'single-quoted'
au lieu de"double quoted"
chaînes sont une autre bonne pratique: http://google.github.io/styleguide/vimscriptguide.xml?showone=Strings#StringsHT @fc. - cette réponse s'appuie sur leur réponse , corrigeant quelques lacunes.
la source
Si vous ne faites correspondre qu'une chaîne exacte (indépendante de la casse) avec quelques majuscules possibles, une autre possibilité est:
la source
Une alternative au plugin keepcase est SmartCase - remplacer les mots tout en conservant la casse d'origine . (Ne vous laissez pas décourager par les mauvaises notes.)
la source
:%s/file\A\?size/\=SmartCase("LastModifiedTime")/ig
?:SmartCase
commande. J'ai étendu cela dans ma propre fourchette . Notez que cela nécessite ingo-library en tant que dépendance.