Auto Einrückungs- / Formatcode für Vim?

Ich versuche immer mehr, Vim zu verwenden, wenn ich kann. Einer meiner größten Probleme zwischen Vim und einer IDE wie Aptana ist die Fähigkeit zum automatischen Einrücken

Gibt es eine Möglichkeit zur automatischen Formatierung von Code (HTML, CSS, PHP), damit dieser ordnungsgemäß eingerückt wird?

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

Kommentare

  • Können Sie klarstellen, welche Sprache Sie einrücken möchten? Ich würde erwarten, dass wenn es ‚ bereits von vim unterstützt wird, es bereits ohne weiteren Aufwand automatisch eingerückt werden sollte. Wenn nicht, sollten Sie in der Lage sein, ein Plugin zu erhalten.
  • Idealerweise HTML / CSS und PHP

Antwort

So rücken Sie die gesamte Datei automatisch ein:

gg =G 

Erklärt:

  • gg – gehe zum Anfang der Datei
  • G – gehe zum Ende der Datei
  • = Einzug

Kommentare

  • Könnten Sie es aufschlüsseln? Was ist g normalerweise für sich? und = G?
  • @Chris siehe die Bearbeitung
  • Netter Hinweis, das habe ich nie gewusst. Es führt jedoch einen Mülljob mit bash aus.
  • Wie kann man gg=G von der Shell aus ausführen, ohne die Datei zu öffnen?
  • @takeshin können Sie Bitte erklären Sie es viel weiter. Müssen wir es in die Datei eingeben oder im Terminal ausführen?

Antwort

Ich weiß nichts über die automatische Formatierung von vorhandenem Code, aber wenn Sie Code schreiben und einen automatischen Einzug benötigen:

  • :set autoindent (oder :set ai) aktiviert den automatischen Einzug
  • Strg d , um den Einzug aufzuheben (AKA outent) Ihr Code
  • Tabulator oder Leerzeichen zum Einrücken – Ich persönlich verwende Tabulator
  • :set tabwidth=4 (oder :set tw=4) steuert, wie viele Leerzeichen eine Registerkarte Code einrücken soll
  • Der Befehl >> rückt die aktuelle Zeile ein. Wenn Sie ihm ein Präfix voranstellen eine Zahl, sagen Sie 4>>, dann werden 4 Zeilen eingerückt, beginnend mit der aktuellen Zeile.
  • Ebenso die << Befehl hebt die Einrückung einer Zeile auf

Ich hoffe, dies gibt Ihnen einen guten Start.

Kommentare

  • Um vorhandenen Code automatisch einzurücken, verwenden Sie im normalen Modus ={motion} – z =G rückt den gesamten Code von der aktuellen Zeile bis zum Ende der Datei ein. == rückt die aktuelle Zeile ein.
  • stellt außerdem sicher, dass Einrückungs-Plugins geladen werden (z. B. mit :filetype indent on)
  • set tw = 4 setzt die TEXTWIDTH auf 4

Antwort

Auto Indent *.sh

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

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

Kommentare

  • Gilt dies nur für die Bearbeitung mit vim oder allen Editor-Tools?
  • ~./vimrc gilt nur für den vim-Editor.

Antwort

Dieses Plugin erleichtert die Formatierung Ihres Codes . Es integriert externe Formatierer und hat einen Fallback auf die Einrückungsfunktionalität von vim.

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

Beachten Sie auch den Unterschied zwischen Formatieren und Einrücken. Beim Einrücken wird nur das Leerzeichen vor jeder Zeile korrigiert, während beim Formatieren auch andere Dinge behandelt werden, z. B. Leerzeichen um Operatoren usw.

Antwort

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

set autoindent 

Kommentare

  • Dies fügt den vorhandenen Antworten nichts hinzu …
  • @jasonwryan Eigentlich Hai Vu In der Antwort von ‚ wird :set autoindent erwähnt, wodurch der automatische Einzug nur für die aktuelle Datei aktiviert wird. Hinzufügen in .vimrc aktiviert den automatischen Einzug dauerhaft.
  • Ihr Kommentar wird bereits in der Antwort von Rahul ‚ erwähnt. Denken Sie also nach, bevor Sie

Antwort

Das automatische Formatieren / Einrücken von vim funktioniert ziemlich gut. Fügen Sie diese Zeile zunächst in Ihre ~/.vimrc ein:

filetype plugin indent on 

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

(gg bewegt den Cursor in die erste Zeile. = führt die aus Einrückungsbefehl. G weist den Einrückungsbefehl an, von hier bis zur letzten Zeile ausgeführt zu werden.)

Wenn das Autoformat wirklich schlecht aussieht, da jede Zeile nur eingerückt bleibt, führen Sie :scriptnames aus und prüfen Sie, ob .../indent/html.vim (oder welche Sprache auch immer Sie verwenden) ist in der Liste enthalten. Wenn nicht, stellen Sie sicher, dass Ihre ~/.vimrc korrekt ist. Oder wenn Sie :filetype plugin indent on Über die vim-Befehlszeile müssen Sie die Datei :e

Antwort

Um eine Bash-Skript-Neuformatierung durchzuführen, funktioniert die vorgeschlagene gg = G-Lösung in VIM nicht gut, unabhängig davon, ob Sie das Skript auf Shell-Typ eingestellt haben. Stattdessen funktioniert dies;

shfmt -i 2 -ci script.sh

Um alle Zeilen mit 2 Leerzeichen zu identifizieren und die andere Formatierung zu korrigieren.

Antwort

In bash mache ich Folgendes:

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

Dadurch werden Kommentare entfernt und das Skript „bash way“ neu aktiviert 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 

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

Kommentare

  • Ich glaube, dass dies den Punkt der Frage verfehlt; Anstatt eine Reihe von Zeilen einzurücken, wollte das OP meines Erachtens innerhalb von VIM für eine Vielzahl von Sprachen automatisch einrücken. Abgesehen davon können Sie dies möglicherweise etwas direkter mit sed erreichen, wenn Sie dies wünschen: cat script_to_be_reindented.sh | sed 's#^# #g' (ähm, na ja, SO Markdown ersetzt die Leerzeichen durch eine Registerkarte, aber Sie erhalten den Punkt)
  • Diese Antwort fügt lediglich Leerzeichen vor der Linie ein und setzt alle Ausrichtungen zurück. Dasselbe (ohne Abschriften) kann mit sed -i 's|^[ \t]\+| |' script.sh durchgeführt werden (dh 4 Leerzeichen innerhalb von | |, aber diese Website filtert mehrere Leerzeichen in eines). .

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.