Este complemento no parece funcionar para mí. Si me gusta una palabra BadJoby quiero reemplazarla GoodJob, no puedo usarla %S/badjob/goodjob/g. No puede detectar una coincidencia.
Roymunson
@Roymunson Lo que debe hacer es esto: %S/BadJob/GoodJob/gluego, el comando Subvertir cambiará al modo de mayúsculas y minúsculas y realizará todas las subtensiones según lo dispuesto por OP.
Shivams
28
No sé si este es el tipo de solución que estás buscando ... pero he usado esto:
keepcase.vim
Sí, lo hace desde 2007::% SubstituteCase / \ cbadjob / GoodJob / g ^^
Luc Hermitte
Significado desde gVim 7.2? Lo probé en gVim 7.1 (12 de mayo de 2007) y no funciona :(
fc.
No, agregué el comando: SubstituteCase al complemento en 2007. Eso es todo. El complemento está disponible en vim.org, y no se envía con vim como de costumbre con la mayoría de los complementos.
Luc Hermitte
1. Esto falla cuando el usuario tiene :set ignorecase. 2. Badserá sustituido por en GOODlugar 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!)
Aaron Thoma
7
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 :)
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.
/\zees el azúcar sintáctico vim regex para marcar una anticipación positiva: el patrón posterior \zese 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
¿Hay algún truco para acortar los que son difíciles de recordar y tediosos para escribir comandos :%s/file\A\?size/\=SmartCase("LastModifiedTime")/ig?
Michael Härtl
@ MichaelHärtl: puede usar el :SmartCasecomando. Lo he extendido en mi propio tenedor . Tenga en cuenta que esto requiere ingo-library como una dependencia.
Respuestas:
Use abolish.vim :
fuente
BadJob
y quiero reemplazarlaGoodJob
, 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 ...
fuente
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 :)
fuente
:set ignorecase
. 2.Bad
será sustituido por enGOOD
lugar deGood
. 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 :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-defensivelyis#
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_checkingSe 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#StringsHT @fc. - esta respuesta se basa en su respuesta , solucionando algunas deficiencias.
fuente
Si solo está haciendo coincidir una cadena exacta (independiente de mayúsculas y minúsculas) con algunas mayúsculas posibles, otra posibilidad es:
fuente
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).
fuente
:%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.