2010-07-10 5 views
33

Ich habe einen Ordner mit Hunderten von TTL (TeraTermLanguage) -Dateien. Jetzt wollte ich alle diese Dateien einrücken.Einrücken in VIM mit allen Dateien in Ordner

Ich habe teraterm.vim für Einzug erstellt und ich öffne eine Datei mit VIM und tun "gg = G" und die ganze Datei wird richtig eingerückt.

Aber gibt es eine Möglichkeit, wo ich alle Dateien im Ordner einrücken kann.

Ich wollte mit Hilfe von Shell tun. Aber in VIM konnte ich Dateieinzug Befehl als Argument zu VIM nicht übergeben.

Bitte schlagen Sie vor, welches der beste Weg ist, um alle Dateien in VIM einzumessen.

+0

das ist ein bisschen verwirrend ... welche Shell verwenden Sie? Wenn Sie etwas wie Bash verwenden (und die Antwort von Amphetamachine unten verwenden), sollte das folgende funktionieren: für Datei in * .ttl * TTL; do vim -s indentme.src $ datei; done – skeept

Antwort

57

Viel einfacher als das Schreiben von vim aus der Bash-Befehlszeile ist die Verwendung von vimscript innerhalb von vim (oder vielleicht ein viel einfacherer Einzeiler für das Skripting von vim von der Kommandozeile aus). Ich persönlich bevorzuge die Arg-Liste für alle Multi-Datei-Manipulation. Zum Beispiel:

:args ~/src/myproject/**/*.ttl | argdo execute "normal gg=G" | update 
  • args die arglist setzt, als Platzhalter (** wird das aktuelle Verzeichnis sowie Verzeichnisse entsprechen)
  • | können wir mehrere Befehle in einer Zeile
  • argdo läuft die laufen folgende Befehle auf jedem arg (es wird die zweite | schlucken)
  • execute verhindert normal aus dem Schlucken der nächsten Leitung.
  • normal führt die folgenden normalen Modus Befehle (was Sie mit an erster Stelle arbeiten)
  • update wie :w sind, aber nur spart, wenn der Puffer geändert wird.

Dieses :args ... | argdo ... | update Muster ist für jede Art von Projekt breite Dateimanipulation sehr nützlich (z suchen und über %s/foo/bar/ge oder Einstellung einheitliche fileformat oder fileencoding ersetzen).

(andere Menschen es vorziehen, ein ähnliches Muster der Pufferliste und :bufdo, aber mit der arg Liste mit brauche ich nicht zu schließen Strompuffer oder die Erschließung neue vim Sitzung zu kümmern.)

+0

Danke Nicholas, Das ist einfach eine gute Möglichkeit zu tun. Auch das ist in vielen anderen Fällen sehr hilfreich. Obwohl ich Script verwenden konnte, ist dies viel schneller. Nun, ich habe rund 900 Dateien, die ich ändern musste. Nur Schluckauf ich konfrontiert ist jedes Mal, wenn es den Bildschirm mit Dateinamen füllt, muss ich die Leertaste drücken, so dass es die nächste Reihe von Dateien aufnehmen kann. – hari

+5

Wenn es dir in den Weg kommt, solltest du die "--More--" Eingabeaufforderung vermeiden und jeden Bildschirm durch eine großzügige Anwendung von ': silent' anwählen können. Z.B. ': argdo silent execute" normal gg = G "| silent update' –

+1

+1 und @ nicholasa.evans Ich würde verschieben/kopieren Sie den Inhalt dieses Kommentars in die eigentliche Antwort (aber das ist nur ich) – CoatedMoose

11

Öffnen Sie ein Terminal. Typ:

$ vim -w indentme.scr foo.c 

Dann geben Sie diese genau (im Befehlsmodus):

gg=G:wq 

Diese vim schließt, spart den Prozess der Einrücken alle Zeilen in der Datei zu einem Vim-Skript indentme.scr genannt.

Hinweis:indentme.scr wird eine Aufzeichnung aller Tastaturbefehle eingegeben enthalten, so dass, wenn Sie die Datei fertig sind einrücken, nicht viel Zeit mit den Pfeiltasten verbringen um die Datei zu suchen, da dies führen zu einem viel größeren Skript und wird Batch-Vorgänge stark verlangsamen.

Nun, um alle Zeilen in einer Datei zu einzurücken, geben Sie einfach den folgenden Befehl ein:

$ vim -s indentme.scr unindented-file.c 

Vim open-shut blinken (wenn Sie auf einem schnellen Computer sind und keine große Bearbeitung Datei), alle Zeilen einrücken und dann die Datei an Ort und Stelle speichern.

Leider wird dies nur zu einer Zeit an einer Datei arbeiten, aber Sie können die Funktionalität leicht skalieren mit sh ‚s for Schleife:

for filename in *.ttl ; do 
    vim -s indentme.scr "$filename" 
done 

Hinweis: Dies wird jede Datei speichern-over. Sofern nicht set bk in Ihrem ~/.vimrc ist, erwarten Sie nicht, dass ein Backup gespeichert wird.

2

Ich ging weg von Amphetamachin-Lösung. Allerdings musste ich rekursiv mehrere Verzeichnisse durchsuchen. Hier ist die Lösung, die ich verwendet habe:

0

Unter Bezugnahme auf die obigen Antworten möchte ich dies vervollständigen. Ich werde von vorne anfangen, damit ein Anfänger es verstehen kann.

Step-1 Installieren astyle (Tool zur Formatierung verwendet wird) durch den folgenden Befehl unter Verwendung einen Terminal zu öffnen. Typ:

sudo apt-get install astyle 

Step-2 Stellen Sie sicher, vim auf system.Run die unten Befehle aus dem Verzeichnis installiert, in dem der Code-Dateien unter Befehl are.The wird ein Skript erstellen, die wir ausführen möchten rekursiv, um jede einzelne Datei in unserem Verzeichnis zu verschönern. (wie in der obigen Antwort erwähnt)

vim -w indentme.scr foo.c 

Step-3 Dann wird dieser Typ genau (im Befehlsmodus) und drücken Sie die Eingabetaste

:%!astyle 

Step-4 Dieses Dann genau (in Befehlsmodus) -Typ und drücken

:wq 

Step-5 Last laufen diese rekursiv durch den folgenden Befehl ein:

find . -type f -name '*.cpp' -exec vim -s indentme.scr "{}" \; 

Alle Ihre cpp-Dateien werden korrekt formatiert.

Verwandte Themen