Come posso correggere il rientro di un intero file in Vi?


625

In Vim, qual è il comando per correggere il rientro di tutte le righe?

Spesso copio e incollo il codice in un terminale remoto e faccio incasinare tutto. Voglio risolvere questo problema in un colpo solo.


Simile: rientro del codice con rientro grave al Vi SE
kenorb,

8
Prevenire è meglio che curare. In quello spirito arriva questo commento. Esegui un ": imposta incolla" prima di accedere alla modalità di inserimento e incollare il codice dal terminale remoto.
Chthonic Project,

Risposte:


1215

=, il comando indent può prendere dei movimenti. Quindi, ggper ottenere l'inizio del file, =al rientro, Galla fine del file, gg=G.


39
Non sarò mai in grado di disimparare il mio prezioso 1G =) Uno dei miei preferiti è =% in piedi su una parentesi aperta. Corregge i rientri dell'intero blocco.
PEZ,

2
: 0 <return> non è poi così male ma gg è carino. (sì, ho imparato prima)
Erik Olson,

8
Posso indentare l'intero file senza lasciare la riga corrente?
Fábio Perez,

86
@ Fábio: ''(due virgolette singole) ti riporta al punto in cui eri quindi gg=G''dovrebbe rientrare e poi tornare.
Nemo157,

@ArchimedesTrajano Lo stock di Mac OS è molto vecchio, consiglio la versione di HomeBrew; è molto più nuovo. Ho avuto alcuni fastidiosi problemi con il vim di Mac. Inoltre, ho sentito che non dovresti scherzare con quello integrato, quindi non provare ad aggiornarlo da solo a meno che tu non sia molto attento.
AlexMA

126

Prima di incollare nel terminale, prova :set pastee poi :set nopastedopo aver finito. Questo disattiverà il rientro automatico, il ritorno a capo e altre funzionalità che rovinano la tua pasta.

modifica: Inoltre, dovrei sottolineare che un risultato molto migliore rispetto al =rientro di solito può essere ottenuto utilizzando un programma esterno. Ad esempio, corro :%!perltidysempre. astyle, cindentecc. possono anche essere utilizzati. E, naturalmente, è possibile mappare quelli su un tratto di chiave e mappare quelli diversi sulla stessa sequenza di tasti a seconda del tipo di file.


5
È possibile impostare l' equalprgopzione in un ftplugin per utilizzare un filtro esterno per il =rientro, piuttosto che un keybinding personalizzato.
Josh Lee,

C'è anche un'opzione di associazione tasti pastetoggle, ad es. : imposta pt \ p per passare da una modalità all'altra
michael

Nota: in vimconfig di grml il tasto pastetoggle è mappato su F11
Thomas

Uso formatpgmcon ordine e stile e poi gq. Ecco alcuni esempi dei miei .vimrc: au FileType xml set fp=tidy\ -q\ -i\ -xmleau FileType java set fp=/usr/local/bin/astyle\ --mode=java\ --indent=tab
Raffi Khatchadourian,

appena scaricato perltidy dopo aver letto questo, è molto meglio del rientro automatico di vim predefinito
Joey Ciechanowicz

29

Se vuoi reindirizzare il blocco in cui ti trovi senza dover digitare alcun accordo, puoi fare:

[[=]]

1
Mi dispiace ravvivare questo, ma cosa intendevi con accordi? Coordinate?
John P

7
"Accordi" qui si riferisce ai comandi emessi tenendo premuto un tasto mentre si preme un altro, in analogia agli accordi musicali dove suonavano più note contemporaneamente. Quindi G è shift + g, ^] è ctrl +] e così via. La loro scrittura richiede più tempo rispetto ai collegamenti a chiave singola.
Ralph Giles,

Puoi anche usare =aBciò che non sposta affatto il cursore.
entro il

7
Sulla tastiera nordica, sono [[=]]necessari 5 accordi :(
k4kuz0

29

Il padrone di tutti i comandi è

gg=G

Questo rientra l'intero file!

Di seguito sono riportati alcuni dei comandi semplici ed eleganti utilizzati per indentare rapidamente le linee in Vim o gVim.

Per rientrare in tutte le righe sotto la riga corrente

=G

Per rientrare nella riga corrente

==

Per rientrare le nrighe sotto la riga corrente

n==

Ad esempio, per rientrare 4 righe sotto la riga corrente

4==

Per rientrare in un blocco di codice, vai su una delle parentesi graffe e usa il comando

=%

17

È possibile utilizzare l'applicazione / utilità ordinata per indentare i file HTML e XML e funziona abbastanza bene nel rientro di quei file.

Prettify un file XML

:!tidy -mi -xml %

Prettify un file HTML

:!tidy -mi -html %

16

premi Esc e digita velocemente le seguenti combinazioni:

gg=G

28
Ho digitato lentamente, non crederai a quello che è successo dopo.
k0pernikus,

Ho appena dato la risposta e il commento un voto perché non ha prezzo! lol @ k0pernikus
gglasses,

12

1G=G. Questo dovrebbe rientrare in tutte le righe del file. 1Gti porta alla prima riga, =avvierà il rientro automatico e la finale Gti porterà all'ultima riga nel file.


O addirittura1gg=G
Biggybi il

1G = G lo ha riparato per me. Eccezionale!
Natus Drew

8

:set pasteè il tuo amico che uso stucco e finisco per copiare il codice tra windows. Prima che mi accendessi a :set paste(e :set nopaste) copia / incolla mi ha dato le giuste ragioni per questo motivo.


1
Sì, sto usando anche stucco. : set paste è fantastico
mmcdole,

7

In Vim, utilizzare :insert. Ciò manterrà tutta la formattazione e non eseguirà il rientro automatico. Per ulteriori informazioni help :insert.


7

se non si desidera utilizzare :set paste, fare clic con il tasto centrale set nopaste, è anche possibile incollare il contenuto degli Appunti:

"*p
"+p

In questo modo non è necessario uscire dalla modalità normale. se devi incollare +o *dipende da come hai selezionato il testo, vedi :help quoteplus.


4

vim-autoformat formatta i tuoi file sorgente usando programmi esterni specifici per la tua lingua, ad esempio la gemma "rbeautify" per i file Ruby, il pacchetto npm "js-beautify" per JavaScript.


3

Per file C ++ complessi vim non ottiene sempre la formattazione corretta quando si utilizza il =comando di filtro di vim . Quindi per tali situazioni è meglio usare un formattatore C ++ esterno come astyle (o non giustificato ), ad esempio:

:%!astyle

La funzione '=' di Vim usa il suo formattatore interno di default (che non sempre risolve le cose) ma si può anche impostarlo usando un formattatore esterno, come astyle, impostandolo in modo appropriato come discusso in questa domanda .



1

Puoi creare una mappatura per fare questo per te.

Questo rientra automaticamente nell'intero file e mantiene il cursore nella posizione in cui ti trovi:

nmap <leader>ai mzgg=G`z

0

Per vi Editor, utilizzare: insert. Ciò manterrà tutta la formattazione e non inserirà il rientro automatico. Una volta terminato, premi Esc per visualizzare il file formattato effettivo, altrimenti vedrai alcuni caratteri inutili. come ^ I es .:

public static void main(String[] args) {
^I
^I System.out.println("Some Garbage printed upon using :insert"); 
}

0

Basta andare in modalità visiva in vim e selezionare dalle linee su e giù dopo aver selezionato basta premere =, Tutta la linea selezionata verrà rientrata.


Lo eviterei. La modalità visiva è per quando non sei sicuro dei tuoi movimenti, se sai come catturare un set di personaggi, non ha senso il passaggio aggiuntivo di passare alla modalità visiva. Perché ggvG=quando puoi gg=G. Qual era lo scopo di rendere visibile il movimento? Questo vale per tutte le azioni che prendono dei movimenti.
alextes,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.