2011-11-16 16 views
16

Cuando se tiene un bloque de texto delimitado por corchetes o comillas, puede utilizarVim: cambiar/borrar hasta el final de un "bloque"

ci" 
da(

y así sucesivamente para cambiar ese bloque de texto. Pero, ¿hay alguna manera de cambiar o eliminar desde el cursor hasta el final de ese bloque (de la forma en que lo hace por palabras el cw)?

+0

Por "bloque" de texto, ¿te refieres a un párrafo? –

+0

No, me refiero a algo delimitado por comillas, corchetes, llaves, llaves, etc. No sé cómo se suele llamar. –

Respuesta

13

de Benoit es la mejor manera que conozco. Cuando se trata de eliminar al final de un bloque entre paréntesis, puede usar ]). Esto tendrá en cuenta cualquier paréntesis anidado. También hay un correspondiente [(, ]} y [{.

+0

¿Cómo se llaman estos movimientos? Me gustaría leer sobre ellos en el manual de vim. –

+2

No hay mucho que leer, pero me temo que puedes encontrarlo con ': help [(' . –

+0

¡Gracias! 'D]}' hace exactamente lo que estaba buscando (borrar del cursor al final del bloque). – vrmc

5

Consulte la sección "Text object selection" de la ayuda de Vim. Puede definir las secuencias de selección allí con operaciones de eliminación y cambio. Se muestra cómo seleccionar bloques delimitados por cualquiera de los siguientes (y más):

  • {}
  • ()
  • Cotizaciones (' or ")

Por ejemplo:

d} y c} se eliminará y cambiará del cursor al final del párrafo.

22

Uso ct) a “c orrect t mal cierre de paréntesis”.

Los movimientos de Vim con t, f, T y F son muy, muy útiles. :help t, :help f.

Actualización: Si hay paréntesis, donde se anidan:

  • vi)o`` seleccionará hasta el cierre de los paréntesis (seleccionará paréntesis en el interior, a continuación, cambiar a otro extremo de la selección y moverlo a donde estaba (``)
  • vi)`` seleccionará hasta la apertura de Parenthese (mismo mecanismo, pero sin necesidad de o)

El primero funciona solo porque cuando está haciendo vi) se recuerda un salto de cursor, y `` va a la ubicación anterior del cursor. Parece que o en modo visual no afecta esto.

+2

Un detalle: hay una ligera diferencia con la pregunta original, supongo, ya que esto se aplicará al próximo paréntesis de cierre inmediato, mientras que 'vi (' por ejemplo buscaría el que coincida. Por ejemplo, escribir 'vi (' mientras en el 'x' en' (texto (más)) 'también seleccionará' (more) ', mientras se escribe' vt) 'no se podrá seleccionar el primer paréntesis de cierre. – Philippe

+0

@Philippe: ¿tiene una solución que lo haga exactamente? lo correcto? –

+1

En el ejemplo de Philippe, 'vf)' selecciona 'xt (más)'. 'v2t)' haría lo mismo pero con demasiado conteo y tipeo para mi gusto. – romainl

4

No sé de una manera genérica para hacer lo que quiera, pero, suponiendo que se encuentre en el k en:

The (quick (brown) fox) jumps over the lazy dog. 
  • v2t) seleccionaría:

    (The quick (brown) fox) jumps over the lazy dog. 
         ^^^^^^^^^^^^^ 
    

    Si no desea contar, puede encadenar t) para ampliar su selección: vt)t) seleccionaría primero:

    (The quick (brown) fox) jumps over the lazy dog. 
         ^^^^^^^^ 
    

    a continuación:

    (The quick (brown) fox) jumps over the lazy dog. 
         ^^^^^^^^^^^^^ 
    
  • vT( seleccionaría: Respuesta de utilizar y t f TF

    (The quick (brown) fox) jumps over the lazy dog. 
    ^^^^^^^^^ 
    
Cuestiones relacionadas