Leerzeichen mit C in vim automatisch einrücken?

84

Ich bin mit Eclipse und Java etwas verwöhnt worden. Ich habe angefangen, vim für die C-Codierung in einer Linux-Umgebung zu verwenden. Gibt es eine Möglichkeit, vim automatisch den richtigen Abstand für Blöcke festlegen zu lassen?

Nach der Eingabe von a {werden in der nächsten Zeile 2 Leerzeichen eingerückt, und bei einer Rückgabe in dieser Zeile wird der gleiche Einzug beibehalten, und bei a} werden 2 Leerzeichen zurückgeschoben.

zxcv
quelle

Antworten:

133

Diese beiden Befehle sollten es tun:

:set autoindent
:set cindent

Für Bonuspunkte legen Sie diese in einer Datei mit dem Namen .vimrc ab, die sich in Ihrem Home-Verzeichnis unter Linux befindet

davr
quelle
12
Ich würde auch empfehlen, diese in ~ .vim / ftplugin / c.vim zu speichern, damit Sie nicht ständig cindent verwenden, sondern nur für C / C ++ - Dateien.
Graywh
@graywh: Was ist mit pl, php, cpp, as, java und allen anderen Dateien, für die ich den gleichen Einzug haben möchte? Muss ich für jede eine eigene Einstellungsdatei erstellen?
Davr
17
Ich verlasse mich auf Vims gebündelte Einrückungsskripte (: Dateityp Einzug auf), was viel besser ist, als immer nur 'cindent' zu verwenden.
Graywh
3
Warum das Einrücken von Dateitypen besser ist als die Verwendung von cindent, wird hier gut erklärt: vim.wikia.com/wiki/…
Jayen
1
Für Autoindent möchten Sie möglicherweise die Kurzform verwenden: Set ai
Iam Zesh
56

Ich habe alles über Tabs in vim geschrieben , was einige interessante Dinge enthält, nach denen Sie nicht gefragt haben. Verwenden Sie zum automatischen Einrücken von Klammern:

:set cindent

So rücken Sie zwei Leerzeichen ein (anstelle einer Registerkarte mit acht Leerzeichen die Standardeinstellung vim):

:set shiftwidth=2

So verhindern Sie, dass vim acht Leerzeichen in Tabulatoren konvertiert:

:set expandtab

Wenn Sie jemals die Einrückung eines Textblocks ändern möchten, verwenden Sie <und>. Normalerweise verwende ich dies in Verbindung mit dem Blockauswahlmodus (v, wähle einen Textblock aus, <oder>).

(Ich würde versuchen, Sie davon abzubringen, Einrückungen mit zwei Leerzeichen zu verwenden, da ich (und die meisten anderen Leute) Schwierigkeiten beim Lesen haben, aber das ist eine andere Diskussion.)

Commodore Jaeger
quelle
Sehr schöner Blog. Ich bin noch ziemlich neu in Vim, schön zu wissen, dass es da draußen gute Ressourcen gibt.
zxcv
3
Sie haben neben der Schichtbreite auch das Wechseln des Softtabstops verpasst.
Graywh
8

Viele Funktionen von vim (wie autoindentund cindent) sind standardmäßig deaktiviert. Um wirklich zu sehen, was vim für Sie tun kann, brauchen Sie einen anständigen ~/.vimrc.

Ein guter Starter ist dabei $VIMRUNTIME/vimrc_example.vim. Wenn Sie es ausprobieren möchten, verwenden Sie

:source $VIMRUNTIME/vimrc_example.vim

wenn in vim.

Ich würde eigentlich vorschlagen, nur den Inhalt in Ihren zu kopieren, ~/.vimrcda er gut kommentiert ist, und ein guter Ort, um zu lernen, wie man vim benutzt. Sie können dies tun, indem Sie

:e $VIMRUNTIME/vimrc_example.vim
:w! ~/.vimrc

Dies wird Ihre aktuelle überschreiben ~/.vimrc, aber wenn Sie nur die von Davr vorgeschlagenen Einrückungseinstellungen haben, würde ich nicht schwitzen, da das Beispiel vimrc dies auch für Sie erledigt. Eine vollständige Anleitung des Beispiels und was es für Sie tut, finden Sie unter :help vimrc-intro.

Rampion
quelle
6

Einfach ausführen:

user@host:~ $ echo set autoindent >> .vimrc
JamesM-SiteGen
quelle
1
Ich war nicht derjenige, der herabgestimmt hat, aber es lag wahrscheinlich daran, dass einfach "Autoindent setzen" bei Eingabe von "{" und "}" nicht automatisch eingerückt wird und der Abstand auch nicht automatisch auf 2 Leerzeichen gesetzt wird. Darum haben sie gebeten.
Victor Zamanian
3

Ich denke, die beste Antwort wird tatsächlich im vim wikia erklärt:

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

Beachten Sie, dass davon abgeraten wird, "Autoindent setzen" zu verwenden. Die beste Funktion von allem, was ich in dieser Erklärung finde, ist das Festlegen von Einstellungen pro Datei. Dies ist besonders nützlich, wenn Sie beispielsweise in Python und C ++ programmieren, da Sie 4 Leerzeichen für Tabulatoren in der ersteren und 2 für Räume in letzterem.

user809472
quelle
0

und denken Sie immer an diese ehrwürdige Erklärung von Spaces + Tabs:

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

mike511
quelle
2
Was ist mit dem Argument dieses Typen? Ich folge nicht, wie die Nichtverwendung des TAB-Zeichens und das Füllen mit fest codierten Leerzeichen die Probleme aller löst. Dies würde es beispielsweise unmöglich machen, eine Datei zu öffnen und die Breite ihrer Einrückungen nach Ihren eigenen Vorlieben anzeigen zu lassen.
Thomasrutter
1
Die Lösung dieses Typen ist viel besser :) blogs.msdn.com/cyrusn/archive/2004/09/14/229474.aspx
thomasrutter
-1

Versuchen:

setze sw = 2

setze ts = 2

Smartindent einstellen

Craig B.
quelle
Laut der Hilfe ist cindent besser als smartindent, funktioniert aber nur für C-ähnlichen Code.
Thomasrutter
smartindent ist veraltet (war auch nur für C-ähnlichen Code). Einzugsskripte für Dateitypen sind viel besser.
Graywh
@graywh neben dem Wiki, welche maßgebliche Quelle den veralteten Status von smartindent angibt?
Memeplex