Auto Indent / Format Code für Vim?


35

Ich versuche Vim immer mehr zu benutzen, wenn ich kann. Einer meiner größten Vorteile zwischen Vim und einer IDE wie Aptana ist das automatische Einrücken.

Gibt es eine Möglichkeit, Code automatisch zu formatieren (HTML, CSS, PHP), damit er richtig eingerückt wird?

Wenn ja, wie installierst du das in vim? Ich verstehe Plugins nicht sehr gut. Ich habe versucht, diesen Thread zu überprüfen, und es hat mich mehr verwirrt: Wie ändere ich das Verhalten von vim beim automatischen Einrücken?


Können Sie klarstellen, welche Sprache Sie einrücken möchten? Ich würde erwarten, dass, wenn es von vim bereits unterstützt wird, es sich bereits ohne weiteren Aufwand automatisch einrücken sollte. Wenn nicht, sollten Sie in der Lage sein, ein Plugin zu bekommen.
Edd Steel

idealerweise Html / CSS und PHP
Chrisjlee

Antworten:


54

So rücken Sie die gesamte Datei automatisch ein:

gg
=G

Erklärt:

  • gg - zum Anfang der Datei gehen
  • G - gehe zum Ende der Datei
  • =- Einzug

2
Könnten Sie es aufschlüsseln? Was ist g für sich? und = G?
Chrisjlee

@ Chris siehe die Bearbeitung
takeshin

1
Netter Hinweis, das habe ich nie gewusst. Es macht jedoch einen Mülljob mit Bash.
Sparhawk

Wie gg=Gaus der Shell ausführen , ohne die Datei zu öffnen?
WM

@ Takeshin können Sie es bitte viel weiter erklären, müssen wir es in die Datei
eingeben

14

Ich weiß nicht, wie vorhandener Code automatisch formatiert wird, aber wenn Sie Code schreiben und einen automatischen Einzug benötigen:

  • :set autoindent(oder :set ai) aktiviert die automatische Einrückung
  • Ctrl- dum die Einrückung (AKA outdent) Ihres Codes aufzuheben
  • Tabulator oder Leerzeichen zum Einrücken - ich persönlich benutze Tabulator
  • :set tabwidth=4(oder :set tw=4) legt fest, wie viele Leerzeichen ein Tabulator Code einrücken soll
  • Der >>Befehl rückt die aktuelle Zeile ein. Wenn Sie ihm eine Zahl voranstellen, 4>>werden 4 Zeilen eingerückt, beginnend mit der aktuellen Zeile.
  • Ebenso wird der <<Befehl eine Zeile rückgängig machen

Ich hoffe, das gibt Ihnen einen guten Start.


7
Um vorhandenen Code automatisch einzurücken, verwenden Sie den ={motion}normalen Modus - z. B. =Gwird der gesamte Code von der aktuellen Zeile bis zum Ende der Datei eingerückt. ==rückt die aktuelle Zeile ein.
Edd Steel

1
:filetype indent on
Stellen Sie

2
set tw = 4 setzt die TEXTWIDTH auf 4
Steffen Roller

4

Automatischer Einzug *.sh

Fügen Sie einfach die folgenden Zeilen hinzu ~/.vimrc

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

Gilt dies nur für die Bearbeitung mit vim oder allen Editorwerkzeugen?
WM

1
~./vimrcgilt nur für vim editor.
Rahul Patil

2

Dieses Plugin erleichtert die Formatierung Ihres Codes. Es integriert externe Formatierer und greift auf die Einrückungsfunktionen von vim zurück.

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

Beachten Sie auch den Unterschied zwischen Formatieren und Einrücken. Durch Einziehen wird nur das Leerzeichen vor jeder Zeile korrigiert, während durch das Formatieren auch alles andere behandelt wird, z. B. Leerzeichen um Operatoren usw.


2

Erstellen / bearbeiten Sie die ~/.vimrcDatei und fügen Sie die folgende Zeile hinzu:

set autoindent

2
Dies fügt nichts zu den vorhandenen Antworten hinzu ...
jasonwryan

@jasonwryan Tatsächlich erwähnt Hai Vu die Antwort, :set autoindentdie den automatischen Einzug nur für die aktuelle Datei aktiviert . Durch Hinzufügen in die .vimrcDatei wird der automatische Einzug dauerhaft aktiviert.
Akshat Maheshwari

Ihr Kommentar ist in Rahuls Antwort bereits erwähnt, denken Sie also nach, bevor Sie ihn veröffentlichen
Indrajeet Gour

0

In Bash mache ich das:

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

Dies beseitigt Kommentare und ruft das Skript "bash way" erneut auf. es wird nicht funktionieren, wenn das Skript HEREDOCS enthält, aber wenn Sie dies tun:

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

Es funktioniert mit jedem Skript, aber das gesamte Skript wird um 4 Leerzeichen eingerückt. Fühlen Sie sich frei zu ändern, aber meinen Namen in Ihrem Skript zu zitieren und es zu posten! : D


Ich glaube, dass dies den Punkt der Frage verfehlt; Ich bin der Meinung, dass das OP nicht mehrere Zeilen einrücken soll, sondern eine automatische Einrückung innerhalb von VIM für eine Vielzahl von Sprachen. Abgesehen davon können Sie dies möglicherweise ein wenig direkter erreichen, sedwenn Sie dies wünschen: cat script_to_be_reindented.sh | sed 's#^# #g'(
ähm, na ja

0

vims autoformat / indent funktioniert ganz gut. Setzen Sie zuerst diese Zeile in Ihre ~/.vimrc:

filetype plugin indent on

Öffnen Sie dann eine Datei in vim und tippen Sie gg=G

( ggBewegt den Cursor in die erste Zeile. =Führt den Einrückungsbefehl aus. GWeist den Einrückungsbefehl an, von hier bis zur letzten Zeile auszuführen.)

Wenn das Autoformat wirklich schlecht aussieht, weil jede Zeile eingerückt bleibt, führen Sie es aus :scriptnamesund überprüfen Sie, ob .../indent/html.vim(oder welche Sprache Sie auch immer verwenden) in der Liste enthalten ist. Wenn nicht, stellen Sie sicher, dass Ihre ~/.vimrckorrekt ist. Wenn Sie :filetype plugin indent onüber die vim-Befehlszeile ausgeführt haben, müssen Sie die Datei erneut öffnen:e

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.