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?

802voto

skinp Punkte 3877

Es ist vielleicht nichts, was 99% der Vim-Benutzer nicht kennen, aber es ist etwas, das ich täglich benutze und das jeder Linux+Vim Poweruser kennen muss.

Ein einfacher, aber äußerst nützlicher Befehl.

:w !sudo tee %

Ich vergesse oft, sudo zu benutzen, bevor ich eine Datei bearbeite, für die ich keine Schreibrechte habe. Wenn ich die Datei speichern will und einen Fehler bei der Berechtigung erhalte, gebe ich einfach den vim-Befehl ein, um die Datei zu speichern, ohne sie in einer temporären Datei speichern und dann wieder zurückkopieren zu müssen.

Sie müssen sich natürlich auf einem System befinden, auf dem sudo installiert ist und Sie müssen sudo-Rechte haben.

5 Stimmen

Das ist mein Lieblingsstück von vi voodo, ohne Zweifel.

2 Stimmen

Toller Befehl, ich habe aufgehört zu zählen, wie oft mir das passiert ist, seit ich von Slackware auf Ubuntu umgestiegen bin.

1 Stimmen

Funktioniert bei mir nicht in VIM. Nach etwa 2 Sekunden bricht die Passwortabfrage ab und gibt einen Fehler zurück. <pre> [sudo] Passwort für Benutzer: shell gab 1 zurück </pre>

636voto

Chad Birch Punkte 70946

Ich habe vor kurzem etwas entdeckt, das ich sehr cool fand:

:earlier 15m

Stellt das Dokument wieder so her, wie es vor 15 Minuten war. Kann verschiedene Argumente für die Zeitspanne annehmen, die zurückgesetzt werden soll, und ist abhängig von Undolevels. Kann mit dem entgegengesetzten Befehl rückgängig gemacht werden :later

1 Stimmen

Wie kann man erzwingen, dass es nach :Datei bearbeiten wieder funktioniert?

6 Stimmen

@skinp: Wenn Sie den Vorgang rückgängig machen und dann weitere Änderungen aus dem rückgängig gemachten Zustand heraus vornehmen, verlieren Sie die Redo-Historie. So können Sie zu einem Zustand zurückkehren, der sich nicht mehr im Rückgängig-Stapel befindet.

39 Stimmen

Sehr nützlich sind auch g+ und g-, um in der Zeit vor- und zurückzuspringen. Dies ist so viel leistungsfähiger als ein Rückgängig-/Wiederherstellungsstapel, da man den Verlauf nicht verliert, wenn man etwas nach einer Rückgängigmachung tut.

426voto

Jeffrey Knight Punkte 5829

:! [command] führt einen externen Befehl aus, während Sie in Vim sind.

Fügen Sie jedoch einen Punkt nach dem Doppelpunkt hinzu, :.! [command] und es wird die Ausgabe des Befehls in das aktuelle Fenster übertragen. Das ist : . !

Zum Beispiel:

:.! ls

Ich verwende diese Funktion häufig, z. B. um das aktuelle Datum in ein Dokument einzufügen, das ich gerade schreibe:

:.! date

0 Stimmen

Ein weiterer Befehl - ich möchte keine separate Antwort öffnen: Wenn Sie ein geteiltes Fenster haben (:sp [Dateiname] oder :vert split [Dateiname), können Sie die Fenster mit ^w r vertauschen

76 Stimmen

Dies ist ganz ähnlich wie :r! Der einzige Unterschied ist, dass :r! eine neue Zeile öffnet, während :.! die aktuelle Zeile überschreibt.

0 Stimmen

@Jeffrey: Danke... @saffsd: Dieser einzige Unterschied ist eine tolle Sache: Jetzt kann ich Zeilen an sed oder awk übergeben und sie durch die verarbeitete Ausgabe ersetzen lassen...

321voto

dbr Punkte 158949

Nicht gerade obskur, aber es gibt mehrere "Löschen in"-Befehle, die äußerst nützlich sind, wie z. B..

  • diw um das aktuelle Wort zu löschen
  • di( zum Löschen innerhalb der aktuellen Parens
  • di" um den Text zwischen den Anführungszeichen zu löschen

Andere können gefunden werden unter :help text-objects

0 Stimmen

Ich wusste die erste :)

0 Stimmen

@dbr: di( löscht den Inhalt innerhalb der Klammern. Wie kann man nur die Klammern löschen? Ich erinnere mich, dass das auch möglich ist.

0 Stimmen

Jholloway7: Danke, ich habe die Hilfeseite erwähnt und auf die Text-Objekt-Vim-Dokumente verwiesen. Masi: Bin mir nicht sicher, daw löscht die Klammern+Inhalt, der nächste Befehl, der mir einfällt, ist xf)x (Klammer löschen, zur nächsten springen) und erneut löschen)

246voto

de Löschen Sie alles bis zum Ende des Wortes, indem Sie nach Herzenslust auf . drücken.

ci(xyz[Esc] -- Dies ist ein seltsamer Fall. Hier bedeutet das "i" nicht den Einfügemodus. Stattdessen bedeutet es innerhalb der Klammer. Diese Sequenz schneidet also den Text innerhalb der Klammer, in der du stehst, aus und ersetzt ihn durch "xyz". Es funktioniert auch innerhalb von eckigen und figurativen Klammern - machen Sie einfach ci[ oder ci{ entsprechend. Natürlich können Sie auch di verwenden (wenn Sie einfach den gesamten Text löschen wollen, ohne etwas einzugeben). Sie können auch a anstelle von i wenn Sie auch die Klammern und nicht nur den Text innerhalb der Klammern löschen wollen.

ci" - schneidet den Text in laufenden Anführungszeichen aus

ciw - schneidet das aktuelle Wort ab. Dies funktioniert genauso wie das vorherige Verfahren, außer dass ( wird ersetzt durch w .

C - schneiden Sie den Rest der Zeile ab und wechseln Sie in den Einfügemodus.

ZZ -- Speichern und Schließen der aktuellen Datei (WEG schneller als Strg-F4 zum Schließen der aktuellen Registerkarte!)

ddp - aktuelle Zeile um eine Zeile nach unten verschieben

xp -- verschiebt das aktuelle Zeichen um eine Position nach rechts

U - Großbuchstaben, also viwU upercases das Wort

~ - schaltet Fall, so viw~ kehrt die Schreibweise des gesamten Wortes um

Strg+u / Strg+d die Seite um einen halben Bildschirm nach oben oder unten blättern. Dies scheint nützlicher zu sein als das übliche bildschirmfüllende Blättern, da man so besser erkennen kann, wie die beiden Bildschirme zusammenhängen. Für diejenigen, die trotzdem den ganzen Bildschirm auf einmal durchblättern wollen, gibt es Strg+f für Vorwärts und Strg+b für Rückwärts. Strg+Y und Strg+E blättern jeweils eine Zeile nach unten oder oben.

Ein verrückter, aber sehr nützlicher Befehl ist zz -- es rollt den Bildschirm, so dass diese Zeile in der Mitte erscheint. Dies eignet sich hervorragend, um den Code, an dem Sie gerade arbeiten, in den Mittelpunkt zu rücken. Die Geschwisterbefehle - zt und zb - machen diese Zeile zur obersten oder untersten Zeile auf dem Bildschirm, was nicht ganz so nützlich ist.

% findet und springt zu der passenden Klammer.

de -- Löschen vom Cursor bis zum Ende des Wortes (Sie können auch dE bis zum nächsten Leerzeichen zu löschen)

bde -- das aktuelle Wort löschen, von links nach rechts, Trennzeichen

df[space] -- löschen bis einschließlich der nächsten Leerstelle

dt. -- löschen bis zum nächsten Punkt

dd -- diese gesamte Zeile löschen

ye (oder yE) -- zieht den Text von hier bis zum Ende des Wortes

ce - schneidet das Ende des Wortes durch

tschüss -- kopiert das aktuelle Wort (ich frage mich, was "Hallo" bedeutet!)

yy -- kopiert die aktuelle Zeile

cc -- unterbricht die aktuelle Zeile, Sie können auch S stattdessen. Außerdem gibt es eine niedrigere Obergrenze s die das aktuelle Zeichen ausschneidet und in den Einfügemodus wechselt.

viwy oder viwc . Aktuelles Wort streichen oder ändern. Drücken Sie . w mehrmals, um jedes weitere Wort auszuwählen, verwenden Sie b sich rückwärts zu bewegen

vi{ - markiert den gesamten Text in Klammern. va{ - markiert den gesamten Text einschließlich {}s

vi(p - alles innerhalb der ()s markieren und durch den eingefügten Text ersetzen

b und e bewegen den Cursor wortweise, ähnlich wie es Strg+Pfeile normalerweise tun . Die Definition des Begriffs "Wort" ist jedoch etwas anders, da mehrere aufeinanderfolgende Deliter als ein Wort behandelt werden. Wenn Sie in der Mitte eines Wortes beginnen, gelangen Sie mit b immer an den Anfang des aktuellen Wortes, und jedes weitere b springt an den Anfang des nächsten Wortes. Ähnlich, und leicht zu merken, e setzt den Cursor an das Ende des aktuellen Wortes und jedes folgenden Wortes.

ähnlich wie b / e Kapital B y E den Cursor wortweise bewegen und dabei nur Leerzeichen als Begrenzungszeichen verwenden.

capital D (tief durchatmen) Löscht den Rest der Zeile rechts vom Cursor, wie Umschalt+Ende/Entf in normalen Editoren (beachten Sie, dass Sie 2 statt 3 Tasten drücken müssen - Umschalt+D)

16 Stimmen

zt ist recht nützlich, wenn Sie es am Anfang einer Funktions- oder Klassendefinition verwenden.

9 Stimmen

vity y vitc kann abgekürzt werden zu yit y cit beziehungsweise.

0 Stimmen

Viwy könnte auch yiw sein. viwc könnte auch ciw sein. Aber das vi... ist wahrscheinlich leichter zu merken, da man es in vielen Fällen benutzt.

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