829 Stimmen

Was sind die dunklen Ecken von Vim, von denen Ihnen Ihre Mutter nie erzählt hat?

Es gibt eine Fülle von Fragen, in denen über gängige Tricks gesprochen wird, vor allem " Vim+ctags Tipps und Tricks ".

Ich beziehe mich jedoch nicht auf häufig verwendete Abkürzungen, die jemand, der neu in Vim ist, cool finden würde. Ich spreche von einem erfahrenen Unix-Benutzer (sei es ein Entwickler, Administrator, beides, usw.), der glaubt, etwas zu wissen, was 99% von uns noch nie gehört haben oder wovon sie träumen. Etwas, das ihnen nicht nur die Arbeit erleichtert, sondern auch COOL ist und hackisch . Immerhin, Vim befindet sich in dem an dunklen Ecken reichsten Betriebssystem der Welt, daher sollte es Feinheiten haben, die nur wenige Privilegierte kennen und mit uns teilen wollen.

0 Stimmen

Starten Sie einen anderen Editor oder Befehle mit !commandName

12 Stimmen

:Sex Fenster teilen und integrierten Datei-Explorer öffnen (horizontale Teilung)

3 Stimmen

Diese Frage scheint ziemlich konstruktiv zu sein - wenn man sich die Anzahl der Upvotes ansieht... Ich habe für die Wiedereröffnung gestimmt - vielleicht kommt ja eine noch coolere Antwort - die hochgevotet werden kann, wenn sie nützlich ist - und somit SOF mehr Wert verleiht. Wenn ich die Antworten nach Stimmen ordne, habe ich in nur 5 Minuten eine Menge cooles Zeug gelernt... wirklich wertvolles Zeug hier, warum etwas so wertvolles schließen? Wieso ist das nicht konstruktiv?

102voto

sjh Punkte 2200

Ich bin mir nicht sicher, ob das überhaupt zur dunklen Ecke zählt, aber ich habe es gerade erst gelernt...

:g/match/y A

kopiert alle Zeilen, die "match" enthalten, in die Datei "a / @a registrieren. (Die Großschreibung als A macht vim anhängen. yankings anstelle des Ersetzens des vorherigen Registerinhalts). Ich habe es in letzter Zeit oft benutzt, wenn ich Stylesheets für den Internet Explorer erstellt habe.

0 Stimmen

Zählt, zählt, da ich diesen nicht gesehen habe :)

0 Stimmen

Schönes Ding. Noch nie davon gehört... Könnte nützlich sein :P

7 Stimmen

Sie können :g! verwenden, um Zeilen zu finden, die nicht mit einem Muster übereinstimmen, z. B. :g!/set/normal dd (alle Zeilen löschen, die nicht set enthalten)

97voto

MikeyB Punkte 3258

Möchten Sie Ihren :Befehlsverlauf einsehen?

q:

Dann durchsuchen, bearbeiten und schließlich den Befehl ausführen.

Haben Sie schon einmal ähnliche Änderungen an zwei Dateien vorgenommen und zwischen ihnen hin- und hergewechselt? (Sagen wir, Quell- und Header-Dateien?)

:set hidden
:map <TAB> :e#<CR>

Wechseln Sie dann zwischen diesen Dateien hin und her.

139 Stimmen

Ich schlug q: immer wieder aus Versehen...

12 Stimmen

Alternativ können Sie im ex-Editor (:) die Tastenkombination STRG-f drücken, um das Fenster mit der Befehlshistorie aufzurufen.

6 Stimmen

@jleedev Ich auch. Ich hasse diesen Befehl fast, weil ich ihn versehentlich viel zu oft benutze.

90voto

Cercerilla Punkte 1333

Vim wird eine URL öffnen, zum Beispiel

vim http://stackoverflow.com/

Praktisch, wenn Sie die Quelle einer Seite zum Nachschlagen aufrufen müssen.

2 Stimmen

Bei mir wurde der Quelltext nicht geöffnet; stattdessen wurde die gerenderte Seite offenbar mit Hilfe von elinks in einen Puffer übertragen und dann geöffnet.

0 Stimmen

Bei der Ausführung dieses Befehls tritt ein Fehler auf

7 Stimmen

Mit einem Schrägstrich am Ende funktioniert es besser. Toller Trick!

73voto

spence91 Punkte 72389

Makros können andere Makros aufrufen und auch sich selbst aufrufen.

z. B:

qq0dwj@qq@q

...löscht das erste Wort aus jeder Zeile bis zum Ende der Datei.

Dies ist ein recht einfaches Beispiel, aber es demonstriert eine sehr mächtige Funktion von vim

3 Stimmen

Ich wusste nicht, dass Makros sich wiederholen können. Cool! Hinweis: qx beginnt die Aufzeichnung in Register x (er verwendet qq für Register q). 0 bewegt sich an den Anfang der Zeile. dw löscht ein Wort. j bewegt sich eine Zeile nach unten. @q führt das Makro erneut aus (definiert eine Schleife). Sie haben jedoch vergessen, die Aufzeichnung mit einem abschließenden "q" zu beenden und das Makro dann tatsächlich durch Eingabe von @q auszuführen.

2 Stimmen

Ich denke, das ist beabsichtigt, als verschachteltes und rekursives Makro.

7 Stimmen

qqqqqifuu<Esc>h@qq@q

59voto

Brian Carper Punkte 68444

Vorausgesetzt, Sie haben Perl- und/oder Ruby-Unterstützung einkompiliert, :rubydo y :perldo führt einen Ruby- oder Perl-Einzeiler auf jeder Zeile in einem Bereich aus (Standardeinstellung ist der gesamte Puffer), wobei $_ an den Text der aktuellen Zeile (abzüglich des Zeilenumbruchs) gebunden. Manipulation von $_ wird der Text dieser Zeile geändert.

Sie können dies benutzen, um bestimmte Dinge zu tun, die in einer Skriptsprache einfach zu tun sind, aber nicht so offensichtlich mit Vim builtins. Zum Beispiel, um die Reihenfolge der Wörter in einer Zeile umzukehren:

:perldo $_ = join ' ', reverse split

Zum Einfügen einer zufälligen Zeichenfolge von 8 Zeichen (A-Z) am Ende jeder Zeile:

:rubydo $_ += ' ' + (1..8).collect{('A'..'Z').to_a[rand 26]}.join

Sie können jeweils nur eine Zeile bearbeiten und keine Zeilenumbrüche einfügen.

0 Stimmen

Was ist, wenn ich möchte, dass perldo nur in einer bestimmten Zeile ausgeführt wird? oder nur in einigen ausgewählten Zeilen?

5 Stimmen

Sie können ihm wie jedem anderen Befehl einen Bereich zuweisen. Zum Beispiel wird :1,5perldo nur auf die Zeilen 1-5 angewendet.

0 Stimmen

Könnten Sie $_ += ' machen? \nNEWLINE !!!', um einen Zeilenumbruch nach der aktuellen Zeile zu erhalten?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X