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 Sie4>>
, 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). .