Rientro automatico degli spazi con C in vim?


85

Sono stato un po 'viziato usando Eclipse e java. Ho iniziato a usare vim per eseguire la codifica C in un ambiente Linux, c'è un modo per fare in modo che vim esegua automaticamente la spaziatura corretta per i blocchi?

Quindi, dopo aver digitato un {la riga successiva avrà 2 spazi rientrati, e un ritorno su quella riga lo manterrà alla stessa indentazione, e a} tornerà indietro di 2 spazi?

Risposte:


135

Questi due comandi dovrebbero farlo:

Per ottenere punti bonus, inseriscili in un file chiamato .vimrc che si trova nella tua home directory su Linux


12
Consiglierei anche di inserirli in ~ .vim / ftplugin / c.vim in modo da non utilizzare cindent tutto il tempo, ma solo per i file C / C ++.
graywh

@graywh: E per pl, php, cpp, as, java e tutti gli altri file che voglio avere lo stesso rientro? Devo creare un file di impostazioni separato per ognuno?
davr

17
Mi affido agli script di rientro in bundle di Vim (: filetype indent on) che è molto meglio che usare sempre "cindent".
graywh

3
perché l'indentazione del tipo di file è migliore rispetto all'uso di cindent è ben spiegato qui: vim.wikia.com/wiki/…
Jayen

1
Per l'autoindent, potresti voler usare la scorciatoia: set ai
Iam Zesh

56

Ho scritto tutto sulle schede in vim , che fornisce alcune cose interessanti di cui non hai chiesto. Per far rientrare automaticamente le parentesi graffe, usa:

Per far rientrare due spazi (invece di una tabulazione di otto spazi, il valore predefinito di vim):

Per impedire a vim di convertire otto spazi in tabulazioni:

Se vuoi cambiare il rientro di un blocco di testo, usa <e>. Di solito lo uso insieme alla modalità di selezione del blocco (v, seleziona un blocco di testo, <o>).

(Proverei a convincerti a non usare il rientro di due spazi, poiché io (e la maggior parte delle altre persone) trovo difficile leggere, ma questa è un'altra discussione.)


Blog molto carino. Sono ancora abbastanza nuovo da vim, ma è bello sapere che ci sono buone risorse là fuori.
zxcv

3
Ti sei perso anche la modifica del softtabstop oltre alla larghezza del turno.
graywh

8

Molte funzionalità di vim (come autoindente cindent) sono disattivate per impostazione predefinita. Per vedere davvero cosa può fare vim per te, hai bisogno di un file decente ~/.vimrc.

Un buon antipasto è in arrivo $VIMRUNTIME/vimrc_example.vim. Se vuoi provarlo, usa

quando in vim.

In realtà suggerirei di copiare i contenuti sul tuo ~/.vimrcpoiché è ben commentato e un buon punto di partenza per imparare a usare vim. Puoi farlo da

Questo sovrascriverà la tua corrente ~/.vimrc, ma se tutto ciò che hai dentro sono le impostazioni di rientro suggerite da Davr, non mi preoccuperei, poiché l'esempio vimrc si prenderà cura di questo anche per te. Per una panoramica completa dell'esempio e cosa fa per te, vedi :help vimrc-intro.


6

Esegui semplicemente:


1
Non sono stato io a votare contro, ma probabilmente è stato perché semplicemente "imposta rientro automatico" non fa da solo un rientro automatico quando si digita "{" e "}", né imposta automaticamente la spaziatura a 2 spazi. Questo è quello che hanno chiesto.
Victor Zamanian

3

Penso che la risposta migliore sia effettivamente spiegata sul vim wikia:

http://vim.wikia.com/wiki/Indenting_source_code

Si noti che sconsiglia di utilizzare "set autoindent". La migliore caratteristica di tutto ciò che trovo in questa spiegazione è la possibilità di impostare le impostazioni per file, che è particolarmente utile se programmi in Python e C ++, ad esempio, poiché desideri 4 spazi per le schede nel primo e 2 per spazi in quest'ultimo.


0

e ricorda sempre questa venerabile spiegazione di Spazi + Tabulazioni:

http://www.jwz.org/doc/tabs-vs-spaces.html


2
Qual è l'argomento di quel ragazzo? Non seguo come non usare il carattere TAB, e riempire invece di spazi hard-coded, risolva i problemi di tutti. Ciò renderebbe impossibile, ad esempio, aprire un file e visualizzare la larghezza dei rientri in base alle proprie preferenze.
thomasrutter

1
La soluzione di questo ragazzo è molto migliore :) blogs.msdn.com/cyrusn/archive/2004/09/14/229474.aspx
thomasrutter

-1

Provare:

impostare sw = 2

impostare ts = 2

imposta smartindent


Secondo l'aiuto, cindent è migliore di smartindent, ma funziona solo per codice tipo C.
thomasrutter

smartindent è deprecato (era anche solo per codice tipo C). Gli script di rientro del tipo di file sono molto migliori.
graywh

@graywh oltre al wiki quale fonte autorevole afferma lo stato deprecato di smartindent?
memeplex
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.