2011-09-06 6 views
41

Adesso uso VIM con regolarità, ma non uso mai il comando punto (.) Per ripetere l'azione precedente. Continuo a leggere su quanto sia fantastico ma non vedo mai esempi del mondo reale che abbiano senso per me e il modo in cui io codifico in VIM. Quali sono alcuni esempi reali che mostrano quanto sia fantastico il comando punto (.)?Qualcuno può spiegarmi perché il comando punto (.) È così utile in VIM?

+1

Ho usato vi da prima che esistesse Vim e ho usato il. comando un bel po ', ma non ho mai sentito nessuno entusiasmare di quanto sia fantastico. Forse non sto leggendo le fan page giuste. –

+2

Recentemente ho iniziato a leggere 'Practical Vim di Drew Neil'. Il libro inizia con il concetto di. operatore, e cerca di farti capire perché pensarlo può essere vantaggioso per la tua produttività. Magari dai un'occhiata. – eugenevd

risposta

31

Ecco alcune azioni che eseguo con il comando punto:

  • Più semplice di quanto :%s/\<word\>/replacement/gc è * sulla parola, quindi cereplacement<esc> e quindi ripetere n.. Questo è bello se hai due o tre occorrenze della tua parola.Se si dispone di più parole che si desidera sostituire, quindi passare alla parola successiva, ha colpito * e di nuovo n.
  • Quando voglio sinistra allineare alcuni blocchi: <Ctrl-V>jjj<..... o inserire spazi nella parte anteriore: <ctrl-v>jjjI<space><esc>....
  • dopo dd o dw, il comando dot cancellerà un'altra linea/parola

una cosa magica che accade con il comando punto è che se si ripete un comando che utilizza un registro numerato, userà il prossimo registro numerato (vedi :help redo-register).

Spiegazione: Se è stato effettuato il dd su 9 righe e si desidera ripristinarle nell'ordine in cui sono state eliminate, eseguire: "1P......... Nota che i registri da 1 a 9 sono l'anello di cancellazione di Vim. "1P inserirà prima del cursore l'ultimo testo cancellato, "2P inserirà quindi il testo cancellato precedente e così via.

+0

grazie a questi due sono piuttosto buoni. – rhinoinrepose

+1

Ooh, stavo cercando qualcosa di simile per velocizzare la ricerca e la sostituzione. Così tante volte ho trovato qualcosa e poi voglio cambiarlo e altri lo apprezzano rapidamente. Grazie per quello. –

11

Io uso dw.... abbastanza spesso per eliminare una serie di parole senza doverle prima contare mentalmente. In questo esempio, 5dw è un numero inferiore di caratteri, ma penso di essere circa 3ms più veloce utilizzando il comando punto per ripetere semplicemente il delete word per il conteggio.

Modifica Stavo proprio facendo un po 'di editing e ho realizzato che c'è un'altra situazione che uso il comando punto una buona dose. Immagino che ci sia un modo molto più semplice di gestire questo tipo di cose in Vim, ma il comando punto aiuta nelle situazioni seguenti e simili. Di seguito è riportato un esempio di "Ho fatto qualcosa una volta, ora voglio ripeterlo un paio di volte." Stavo scrivendo un nuovo test (in C) e dovevo incorporare una costante di stringa che rappresenta uno script SQL che ho copiato da un altro posto. Lo script originale multilinea (7 righe) non era racchiuso tra virgolette doppie, quindi l'ho fatto:

  • Incollare lo script direttamente nel codice (7 nuove righe nel file).
  • Posizionare il cursore sulla prima nuova riga.
  • hospaziospaziospaziospazio"esc per inserire spazi e un preventivo di apertura sulla riga corrente.
  • j. sei volte per aggiungere apertura preventivo per ogni riga aggiuntiva
  • Ri-posizione sulla prima riga del testo incollato.
  • Un\n"esc per mettere un carattere di avanzamento riga e citare la chiusura sulla linea di corrente.
  • j. sei volte di nuovo per mettere la citazione di chiusura le restanti righe
+3

L'ultimo esempio potrebbe essere più semplice con Visual Block: vai all'inizio dello script. Usa 'Ctrl-v' o' Ctrl-q' per richiamare la selezione del blocco. Premi '6j' per andare all'ultima riga. Premi '$' per selezionare fino alla fine della riga. Digita 'I" 'per mettere le virgolette iniziali. Premi' gv' per riselezionare il tuo blocco. Digita 'A \ n" 'per chiudere il preventivo. – idbrii

+0

@pydave: È fantastico. Ho pensato che probabilmente ci fosse un modo più veloce. Sto usando SlickEdit con l'emulazione vim, e quel trucco non funziona per me (ma potrebbe essere perché sto usando una versione precedente). Ci sono alcuni problemi con l'emulazione vim che non mi piacciono, ma la funzionalità di tagging in SlickEdit è veramente buona e rende le poche peculiarità che ne valgono la pena. –

+2

in un altro modo: ':, + 6s /.*/" & \\ n "' o 'V6j: s /.*/" & \\ n "' ('&' nella parte di sostituzione viene sostituito con il modello abbinato). – Benoit

2

Come la recensione precedente, io uso spesso durante l'eliminazione:

  • dw...
  • dd...

E quando ripetere un'azione su più linee:

  • iSomeText:[Esc]j.j.j.
+0

È come un esempio classico. Ma perché non fare "yy" e la "p" un sacco di volte? – rhinoinrepose

+0

Bene, questo non funziona per i comandi che usano più tasti, come 'iSomeText [Esc]' o 'cereplacement [Esc]' (da altra risposta). Nel caso di 'p', hai ragione, ripeti semplicemente il' p'. – paulmelnikow

+0

Per l'ultimo esempio, a volte è possibile utilizzare la selezione dei blocchi per selezionare una colonna per alcune righe e utilizzare I o A. Come "Ctrl + vjjjISomeTextEsc". Ottimo uso del punto però. –

5
do_something(); 
do_another(); 
third_option(); 

Ora, con il cursore nella prima riga: A<bs><cr>{<cr><cr>}<cr>. Ora ha colpito j.j. e

do_something() 
{ 

} 

do_another() 
{ 

} 

third_option() 
{ 

} 
3

miei esempi più comuni stanno cambiando il valore del rientro del testo

>%... 

o semplicemente ri-fare una particolare modifica di testo come l'inserimento (char *) di fronte a diverse variabili:

i(char *)<Esc>jjjwwww.jjjbb. 

(o altro)

3

Tutto il altre risposte forniscono buoni esempi, voglio solo aggiungere che dot è fantastico perché in un certo senso è una macro automatica per l'ultima combinazione di tasti che è solo una chiave di distanza.

Mentre le macro sono grandi, sono un po 'macchinose da usare, mentre lo dot è sempre disponibile, anche se meno potente.

3

Per me il comando punto era inizialmente o meno fino a quando non ho iniziato a registrare macro con qualsiasi frequenza. Il trucco per registrare macro utili è rappresentare il problema come passi ripetibili. A volte il punto è l'unica cosa che farà o almeno renderà il problema molto più facile.

Inoltre, l'uso del comando punto ti costringerà a utilizzare determinati comandi che potresti non aver avuto bisogno prima, ad esempio: cw ct; ci "ca) poiché collassano l'eliminazione/modifica del testo in una" azione "ripetibile per punto.

Inoltre, oltre al punto c'è anche; che uso molto meno frequentemente ma quando lo faccio è molto utile che ripete l'ultimo movimento del testo. Non è utile per cose come w e b ma per cose come f; è un bel piccolo trucco.

2

Quando è necessario convertire questo:

instance Movable Position where 
    (x,y) --> Left = (x-1,y) 
    (x,y) --> Right = (x+1,y) 
    (x,y) --> Up = (x,y-1) 
    (x,y) --> Down = (x,y+1) 

in questo:

instance Movable Position where 
    Position(x,y) --> Left = Position(x-1,y) 
    Position(x,y) --> Right = Position(x+1,y) 
    Position(x,y) --> Up = Position(x,y-1) 
    Position(x,y) --> Down = Position(x,y+1) 

usereste selezione del blocco visiva per la sinistra 'Posizione' e un punto per il diritto.

Problemi correlati