¿Puede esto se puede hacer de Vim?
Lo que quiero decir es: buscar 'BadJob' y reemplazarlo con 'GoodJob' haría los siguientes reemplazos
'badjob' -> 'goodjob' 'BadJob' -> 'GoodJob' 'badJob' -> 'goodJob' 'BADJOB' -> 'GOODJOB'
¿Puede esto se puede hacer de Vim?
Lo que quiero decir es: buscar 'BadJob' y reemplazarlo con 'GoodJob' haría los siguientes reemplazos
'badjob' -> 'goodjob' 'BadJob' -> 'GoodJob' 'badJob' -> 'goodJob' 'BADJOB' -> 'GOODJOB'
Respuestas:
Use abolish.vim :
:%S/badjob/goodjob/g
BadJob
y quiero reemplazarla GoodJob
, no puedo usarla %S/badjob/goodjob/g
. No puede detectar una coincidencia.
%S/BadJob/GoodJob/g
luego, el comando Subvertir cambiará al modo de mayúsculas y minúsculas y realizará todas las subtensiones según lo dispuesto por OP.
No sé si este es el tipo de solución que estás buscando ... pero he usado esto: keepcase.vim
No hay soporte de otra manera en vim ...
seguro que puedes
:s/\cbad/\= strpart(submatch(0), 0 ,1) == toupper(strpart(submatch(0), 0, 1)) ? "GOOD" : "good"/
PD. Supongo que keepcase.vim encapsula una lógica similar :)
:set ignorecase
. 2. Bad
será sustituido por en GOOD
lugar de Good
. 3. La parte " job
" de la pregunta se ignora, por lo que también reemplazará lambada
→ lamgooda
. Correcciones y explicaciones para estos errores y algunas otras cosas en mi respuesta . (¡También LOLOWLs!)
Simplemente puede pegar y adaptar esto:
(Por supuesto, si lo hace de vez en cuando, querrá un complemento en lugar de esta monstruosidad. Pero para algunos que tienen prisa y solo lo necesitan una vez, este es un truco rápido para tu placer pegar :)
:%s/\cbad\zejob/\= ( submatch(0)[0] is# toupper(submatch(0)[0]) ? 'G' : 'g' ) . ( submatch(0)[1] is# toupper(submatch(0)[1]) ? 'OOD' : 'ood' )
Además del patrón de búsqueda, debe editar las cuatro '
cadenas '
en el código de reemplazo: Edite las partes en negrita :
:% s / \ c bad \ ze job / \ =
(submatch (0) [0] es # toupper (submatch (0) [0])? ' G ': ' g ').
(submatch (0) [1] es # toupper (submatch (0) [1])? ' OOD ': ' ood ')
No use esta versión 'naranja' para pegar, ya que sus caracteres de salto de línea también romperán el comando.
/\ze
es el azúcar sintáctico vim regex para marcar una anticipación positiva: el patrón posterior \ze
se verifica pero no se sustituye.
is#
?? Déjame explicarte ... (si está interesado)
#
(también en ==#
y otros ) impone mayúsculas y minúsculas. De lo contrario, con :set ignorecase
(que uso, porque eso es necesario para lo útil :set smartcase
), ¡¡¡vim lo considerará 'a' == 'A'
!!
Loco como es, realmente deberíamos tenerlo en cuenta: ==
dado que depende de la configuración del usuario, ¡ debería usarse NEVAR! (Excepto donde eso sería realmente lo que desea). Incluso seguiré la recomendación de usar ==#
al comparar enteros: http://learnvimscriptthehardway.stevelosh.com/chapters/22.html#code-defensively
is#
en lugar de ==#
es otra forma de codificar a la defensiva: mejora la seguridad de los tipos: http://google.github.io/styleguide/vimscriptguide.xml?showone=Type_checking#Type_checking
Se debe usar al comparar con una cadena literal.
'single-quoted'
en lugar de "double quoted"
cadenas hay otra buena práctica: http://google.github.io/styleguide/vimscriptguide.xml?showone=Strings#Strings
HT @fc. - esta respuesta se basa en su respuesta , solucionando algunas deficiencias.
Una alternativa al complemento keepcase es SmartCase, que reemplaza las palabras mientras se mantiene la carcasa original . (No se deje desanimar por las malas calificaciones).
:%s/file\A\?size/\=SmartCase("LastModifiedTime")/ig
?
:SmartCase
comando. Lo he extendido en mi propio tenedor . Tenga en cuenta que esto requiere ingo-library como una dependencia.