Frage

Bei der Verwendung von Vim (zu Hause und bei der Arbeit), ich finde ich oft wiederholt ähnliche Dinge zu tun. Zum Beispiel kann ich eine Reihe von CSV-Text in eine Reihe von SQL-Einsätzen machen. Ich habe seit Jahren Vim benutzen, aber nur habe vor kurzem habe ich versucht, über ernsthaft nachzudenken, wie ich meine Produktivität steigern konnte, während es zu benutzen.

Meine Frage ist .. Gibt es eine gute Möglichkeit (oder richtig) häufig verwendete Befehle oder Befehlssequenzen zu speichern? Und wie ist der beste Weg, um sie auszuführen? Es wäre schön, das gleiche Skript auf einer Live-Sitzung verwenden und auch über die Kommandozeile gegen eine Datei zu können.

Ich hoffe, dass ich sie in einer .vim Datei speichern kann, damit ich sie an Kollegen übergeben kann (die mit vim nicht so bewandert sind) für sie zu verwenden.

War es hilfreich?

Lösung

Sie können Ihre gemeinsame Aufgabe Makros in .vim Dateien speichern, wie this zum Beispiel, und dann können Sie sie mit dem Befehl laden : so file.vim

Hier Sie eine Reihe von nützlichen Makros finden können, auch empfehle ich Ihnen gut zu lernen die nützlich q Makroaufzeichnung Befehl, es ist sehr, sehr mächtig ...

Die erstellten Makros mit dem q Befehl in einem Register gespeichert ist, qq speichert das Makro in dem q-Register, so dass, wenn Sie die Aufnahme zu beenden können Sie einfach die Makro einfügen, mit “ qp und speichern, später können Sie es laden, indem Sie einfach riss das Makro in ein Register dh: "qY , die Makros sind nur Text und erinnern Sie sich ein beliebiges Register anstelle von q verwenden können. Es gibt einen Vim-Skript zum Speichern von q Makros:

marvim: Makro Persistent Storage und Shareable Repository für VIM

Schauen Sie auch auf die Vim Scripting Language .

Andere Tipps

Ich verwende q / @ aufzeichnen / wiedergeben ein Makro recht häufig.

Der nächste Schritt wird versucht, in so etwas wie 3 oder weniger ex-Befehle zu schreiben.

Wenn etwas so komplex, dass weder ein Makro noch eine kurze ex-Sequenz wird nicht ausreicht, neige ich dazu, es als ein Perl-Skript, anstatt zu schreiben. Die Vim Skriptsprache ist ein bisschen zu begrenzt, um zu versuchen, große Dinge in zu tun, für meinen Geschmack. (Obwohl vim 7 hat große Fortschritte in dieser Hinsicht gemacht, durch ein paar Dinge aus Python zu leihen.)

Beachten Sie, dass @ tut etwas sehr einfach: Es nimmt den Inhalt eines Registers und spielt sie, als ob Sie sie im normalen Modus eingegeben hatten. Ebenso q zeichnet einfach die Reihenfolge Sie die Sie mit der Eingabe in Namen registrieren. Dies sind die selbige registrieren Sie verwenden für zerren / setzen - das heißt, Sie können direkt eine aufgezeichnete Sequenz in eine Datei einfügen (.vimrc anyone?) Oder eine Folge von Befehlen aus einer Datei zerren und es wiederholen (so könnte man ein paar von ihnen in ~/my-vim-macros.txt oder etwas halten).

Sie können speichern Befehlsfolgen in Ihrem .vimrc und weisen Sie einen Schlüssel mit dem :map Befehl zu binden. Zum Beispiel:

echo >>~/.vimrc ":map ,c :%s/,/','/g<CR>:%s/^/('/g<CR>:%s/$/'),/g<CR>"

Beim Drücken der Taste „,c“ in einer Live-Sitzung diese konvertieren Ihre CSV in einen Abschnitt einer INSERT-Anweisung Datei.

Auf der Kommandozeile, die sehr gleiches Stück Bearbeitung kann über (dies wird überschreiben, um Backup sicher sein, zuerst) auf eine Datei angewandt werden:

vim file.txt -c ':normal ,c | :x'

Es könnte ein besserer Weg, aber das funktioniert.

Persönlich, und vielleicht zum Teil, weil ich war mit Unix lange vor vim existierte (Heck, die erste Version von Unix habe ich nicht haben „vi“ entweder - aber das ist eine andere Geschichte), würde ich normalerweise eine ‚Shell verwenden script‘(oder, wahrscheinlicher, ein Perl-Skript) zu tun, die zu transformieren. Für CSV-Daten konvertieren mit Zitaten / Nicht-Zitaten und eingebetteten Kommas in voller Allgemeinheit zu INSERT, zu tun ist etwas chaotisch - ich würde wahrscheinlich will einen Perl-Skript mit Text :: CSV_XS verwendet korrekte Analyse zu gewährleisten. Ich würde dann das Skript auf dem Textbereich ausgeführt werden, die benötigt konvertieren.

Ein Vorteil hierbei ist der fokussierte Werkzeug Ansatz - ein Werkzeug macht einen Job richtig. Mein privates bin-Verzeichnis hat 300 oder mehr Skripte und Programme darin; das RCS-Verzeichnis verfügt über 500 Skripte in ihm.

Dies ist nicht das Scripting in vim zu sagen, ist schlecht. Ich benutze (mehr oder weniger) -Komplex Karte Befehle komplexe Manipulationen zu schreiben, oft, wenn ich bin über die gleiche Änderung in einer Reihe von Dateien zu tun zu haben, und wenn ich nicht glaube, es wird sich lohnen, ein Skript für die Erstellung von Job. Allerdings, wenn ich glaube, ich könnte die Änderungen mehr als einmal benötigen, dann werde ich Skript es. Zum Beispiel begann GCC uppity zu bekommen (circa 2005) über nicht ungenutzt statische Strings in Objektdateien einbetten - die meine Versionskontrollinformationen bedeuteten nicht sichtbar waren. Also, über einen Zeitraum von Jahren, als ich die Quelldateien bearbeiten, habe ich von einem statischen (festen) Namen in einen öffentlichen Namen umgewandelt - ungern, aber notwendigerweise AFAIAC. Ich habe ein Skript, das diese bearbeiten für mich tut, so, wenn ich die Änderung in einer Datei vornehmen müssen, laufe ich das Skript so zu tun. Ich habe ein anderes Skript, das die Copyright-Informationen aktualisiert; Ich brauche, dass jedes Mal, wenn ich zuerst eine Datei in einem bestimmten Jahr ändern. Ja, ich wahrscheinlich es bunkern könnte als etwas in vim - Ich wuchs denken, dass die separate Skript ist besser, nicht zuletzt deshalb, weil, wenn ich einen anderer Editor zu wechseln, kann ich immer noch das Skript verwenden

.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top