Codice rientro / formato automatico per Vim?


35

Sto cercando di usare Vim sempre di più quando posso. Una delle mie più grandi prese tra Vim e un IDE come Aptana è la capacità di rientrare automaticamente.

Esiste un modo per formattare automaticamente il codice (HTML, CSS, PHP) in modo che sia correttamente indentato?

Se sì, come lo installi in vim? Non capisco molto i plugin. Ho provato a rivedere questo thread e mi ha confuso di più: come modificare il comportamento di rientro automatico di VIM?


Potresti chiarire quale lingua stai cercando di indentare? Mi aspetto che se è già supportato da Vim dovrebbe già rientrare automaticamente senza ulteriori sforzi. In caso contrario, dovresti essere in grado di ottenere un plug-in.
Edd Steel,

idealmente Html / css e php
chrisjlee,

Risposte:


54

Per indentare automaticamente l'intero file:

gg
=G

Ha spiegato:

  • gg - vai all'inizio del file
  • G - vai alla fine del file
  • =- trattino

2
Potresti romperlo? Che cos'è g in genere da solo? e = G?
chrisjlee,

@ Chris vede la modifica
takeshin

1
Bel suggerimento, non l'ho mai saputo. Tuttavia, fa un lavoro spazzatura con bash.
Sparhawk,

Come eseguire gg=Gdalla shell senza aprire il file?
WM,

@takeshin puoi per favore spiegarlo molto di più, dobbiamo digitarlo nel file o dobbiamo eseguirlo nel terminale
Kasun Siyambalapitiya,

14

Non conosco la formattazione automatica del codice esistente, ma se stai scrivendo il codice e hai bisogno del rientro automatico:

  • :set autoindent(o :set ai) attiva il rientro automatico
  • Ctrl- dper annullare il rientro (AKA outdent) del codice
  • Scheda o spazi da rientrare: utilizzo personalmente la scheda
  • :set tabwidth=4(o :set tw=4) controllerà il numero di spazi in cui una scheda deve rientrare nel codice
  • Il >>comando indenterà la riga corrente. Se lo anteponi per un numero, supponi 4>>che indentificherà 4 righe, iniziando dalla riga corrente.
  • Allo stesso modo il <<comando disincentra una riga

Spero che questo ti dia un buon inizio.


7
Per rientrare automaticamente nel codice esistente, utilizzare ={motion}in modalità normale, ad esempio =Gindenterà tutto il codice dalla riga corrente alla fine del file. ==indenterà la riga corrente.
Edd Steel,

1
assicurati anche che vengano caricati i :filetype indent on
rientri dei

2
impostare tw = 4 imposta TEXTWIDTH su 4
Steffen Roller

4

Rientro automatico *.sh

Aggiungi solo le seguenti righe ~/.vimrc

filetype indent on
set smartindent
autocmd BufRead,BufWritePre *.sh normal gg=G

Questo si applica solo alla modifica con vim o tutti gli strumenti dell'editor?
WM,

1
~./vimrcapplicabile solo per l'editor vim.
Rahul Patil,

2

Questo plugin semplifica l'esecuzione della formattazione del codice. Integra i formattatori esterni e ha un fallback sulla funzionalità di rientro di Vim.

https://github.com/Chiel92/vim-autoformat

Inoltre, nota la differenza tra formattazione e rientro. Il rientro corregge solo gli spazi bianchi prima di ogni riga, mentre la formattazione si occupa anche di qualsiasi altra cosa, come gli spazi bianchi attorno agli operatori ecc.


2

Crea / modifica il ~/.vimrcfile e aggiungi la seguente riga:

set autoindent

2
Questo non aggiunge nulla alle risposte esistenti ...
Jasonwryan,

@jasonwryan In realtà la risposta di Hai Vu cita :set autoindentche abilita il rientro automatico solo per il file corrente. L'aggiunta nel .vimrcfile abilita il rientro automatico in modo permanente.
Akshat Maheshwari il

il tuo commento è già citato dalla risposta di Rahul, quindi pensa prima di pubblicare
Indrajeet Gour

0

In bash faccio questo:

source <(echo "Zibri () {";cat script_to_be_reindented.sh; echo "}")
declare -f Zibri| cut -c 5-|head --lines=-1|tail --lines=+3

questo elimina i commenti e reindirizza lo script "bash way". non funzionerà se lo script contiene HEREDOCS ma se lo fai:

source <(echo "Zibri () {";cat script_to_be_reindented.sh; echo "}")
declare -f Zibri|head --lines=-1|tail --lines=+3

funzionerà con qualsiasi script ma l'intero script sarà indentato da 4 spazi. sentiti libero di modificare ma cita il mio nome nella tua sceneggiatura e pubblicalo! : D


Credo che a questo punto manchi il punto della domanda; piuttosto che rientrare in una serie di righe, credo che l'OP abbia voluto rientrare automaticamente in VIM per una varietà di lingue. A parte questo, potresti riuscire a raggiungerlo un po 'più direttamente consed se lo desideri: cat script_to_be_reindented.sh | sed 's#^# #g'(ehm, beh, il markdown SO sta sostituendo gli spazi con una scheda, ma ottieni il punto)
eacousineau

0

il formato automatico / rientro di vim funziona abbastanza bene. Innanzitutto, inserisci questa riga nel tuo ~/.vimrc:

filetype plugin indent on

Quindi apri un file in vim e digita gg=G

( ggsposta il cursore sulla prima riga. =esegue il comando indent. Gdice al comando indent di eseguire da qui all'ultima riga.)

Se il formato automatico sembra davvero scadente, come se ogni riga fosse appena rientrata, esegui :scriptnamese controlla se .../indent/html.vim(o qualunque lingua tu stia usando) sia presente nell'elenco. In caso contrario, assicurati che ~/.vimrcsia corretto. Oppure, se hai eseguito :filetype plugin indent ondalla riga di comando di vim, dovrai riaprire il file:e

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.