2011-11-16 14 views
16

Quando si dispone di un blocco di testo delimitato da staffe o citazioni, è possibile utilizzareVim: modifica/eliminazione fino alla fine di un "blocco"

ci" 
da(

e così via per cambiare quel blocco di testo. Ma c'è un modo per cambiare o cancellare dal cursore alla fine di quel blocco (nel modo in cui lo fa per le parole) cw?

+0

Per "blocco" di testo, intendi un paragrafo? –

+0

No, intendo qualcosa delimitato da virgolette, parentesi, parentesi graffe, parentesi graffe e così via. Non so come si chiama di solito. –

risposta

13

di Benoit di usare t f T e F è il modo migliore che io conosca. Quando si tratta di cancellare fino alla fine di un blocco tra parentesi puoi usare ]). Questo terrà conto di ogni parentesi annidata. C'è anche un corrispondente [(, ]} e [{.

+0

Come vengono chiamati questi movimenti? Mi piacerebbe leggere su di loro nel manuale di Vim. –

+2

Non ho molto da leggere Ho paura ma puoi trovarli con ': help [('. –

+0

Grazie! 'D]}' fa esattamente quello che stavo cercando (cancella dal cursore alla fine del blocco). – vrmc

5

Vedere la sezione "Text object selection" della guida di Vim. È possibile definire le sequenze di selezione lì con cancellare e modificare le operazioni. Essa mostra come selezionare i blocchi delimitati da una delle seguenti (e più):

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

Ad esempio:

d} e c} eliminerà e cambierà dal cursore alla fine del paragrafo.

22

Usa ct) a “c orrect t chiusura malato parentesi”.

I movimenti Vim con t, f, T e F sono molto, molto utili. :help t, :help f.

Aggiornamento: Se non ci sono annidati parentesi in cui ti trovi:

  • vi)o`` selezionerà fino a chiusura Parenthese (selezionerà parentesi all'interno, poi passare ad altro fine della selezione e spostarlo a dove eravate (``)
  • vi)`` selezionerà fino all'apertura parenthese (stesso meccanismo, ma senza dover o)

Il primo funziona solo perché quando si esegue vi) viene ricordato un salto del cursore e `` passa alla posizione precedente del cursore. Sembra che o in modalità visiva non influisce su questo.

+2

Un dettaglio: c'è una leggera differenza con la domanda originale, suppongo, poiché ciò si applicherà alla parentesi chiusa successiva immediata, mentre 'vi (' per esempio cercherebbe quella corrispondente, ad esempio, digitando 'vi (' while sulla 'x' in' (text (more)) 'seleziona anche' (more) ', mentre digitando' vt) 'non riuscirà a selezionare la prima parentesi di chiusura – Philippe

+0

@Philippe: hai una soluzione che fa esattamente la cosa giusta? –

+1

Nell'esempio di Philippe, 'vf)' seleziona 'xt (more)'. 'v2t)' farebbe la stessa cosa ma con troppi calcoli e digitando per i miei gusti. – romainl

4

Non so di un modo generico per fare quello che vuoi, ma, supponendo che si sono sul k in:

The (quick (brown) fox) jumps over the lazy dog. 
  • v2t) sarebbe selezionare:

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

    Se non vuoi contare puoi catena t) per ampliare la selezione: vt)t) selezionare per prima:

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

    poi:

    (The quick (brown) fox) jumps over the lazy dog. 
         ^^^^^^^^^^^^^ 
    
  • vT( sarebbe selezionare: risposta

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