Frage Was sind die dunklen Ecken von Vim, von denen deine Mutter dir nie erzählt hat? [geschlossen]


Es gibt eine Fülle von Fragen, wo Leute über gängige Tricks sprechen, vor allem "Vim + Ctags Tipps und Tricks".

Ich beziehe mich jedoch nicht auf häufig verwendete Verknüpfungen, die jemand, den Vim neu findet, cool finden würde. Ich spreche von einem erfahrenen Unix-Benutzer (sei es ein Entwickler, Administrator, beide, etc.), der denkt, dass sie etwas wissen, von dem 99% von uns noch nie gehört oder geträumt haben. Etwas, das nicht nur ihre Arbeit erleichtert, sondern auch COOL und hackisch. Letztendlich, Vim Es befindet sich im Betriebssystem der dunkelsten Ecke der Welt und sollte daher Feinheiten aufweisen, die nur wenige Privilegierte kennen und mit uns teilen möchten.


756


Ursprung


Antworten:


Vielleicht nicht eine, die 99% der Vim-Benutzer nicht kennen, aber es ist etwas, das ich täglich benutze und das jeder Linux + Vim Poweruser wissen muss.

Grundlegender Befehl, dennoch äußerst nützlich.

:w !sudo tee %

Ich vergesse oft, Sudo vor dem Bearbeiten einer Datei, für die ich keine Schreibrechte habe, zu ändern. Wenn ich diese Datei speichern und einen Berechtigungsfehler erhalte, gebe ich einfach diesen vim-Befehl aus, um die Datei zu speichern, ohne sie in einer temporären Datei speichern und dann wieder kopieren zu müssen.

Sie müssen natürlich auf einem System mit sudo installiert sein und sudo Rechte haben.


746



Etwas, das ich kürzlich entdeckt habe und das ich für sehr cool hielt:

:earlier 15m

Setzt das Dokument wieder zurück, wie es vor 15 Minuten war. Kann verschiedene Argumente für die Dauer des Rollbacks übernehmen und ist abhängig von Undolevels. Kann mit dem entgegengesetzten Befehl umgekehrt werden :later


581



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

Aber füge einen Punkt nach dem Doppelpunkt hinzu, :.! [command], und es wird die Ausgabe des Befehls in Ihrem aktuellen Fenster ausgeben. Das ist : . ! 

Beispielsweise:

:.! ls

Ich benutze dies häufig für Dinge wie das Hinzufügen des aktuellen Datums in ein Dokument, das ich gerade tippe:

:.! date

385



Nicht gerade obskur, aber es gibt einige "delete in" -Befehle, die sehr nützlich sind, wie ..

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

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


299



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

ci (xyz [Esc] - Das ist ein komisches. Hier bedeutet das "i" nicht den Einfügemodus. Stattdessen bedeutet es innerhalb der Klammer. Diese Sequenz schneidet also den Text in Klammern, in dem Sie stehen, und ersetzt ihn durch "xyz". Es funktioniert auch in quadratischen und figürlichen Klammern - mach einfach ci [oder ci {entsprechend. Natürlich können Sie di (wenn Sie nur den gesamten Text löschen möchten, ohne etwas einzugeben. Sie können auch tun a Anstatt von i wenn Sie die Klammern auch löschen möchten und nicht nur Text in ihnen.

ci " - schneidet den Text in aktuellen Anführungszeichen

CIW - schneidet das aktuelle Wort ab. Dies funktioniert genau wie die vorherige Ausnahme ( wird ersetzt mit w.

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

ZZ - speichern und schließen Sie die aktuelle Datei (WAY schneller als Strg-F4, um den aktuellen Tab zu schließen!)

ddp - Verschieben Sie die aktuelle Zeile um eine Zeile nach unten

XP - Verschiebe das aktuelle Zeichen um eine Position nach rechts

U - Großbuchstaben, also viwU übertrifft das Wort

~ - Schalter Fall, also viw~ wird die Umhüllung des ganzen Wortes umkehren

Strg + u / Strg + d Scrollen Sie die Seite um einen halben Bildschirm nach oben oder unten. Dies scheint nützlicher als das übliche Vollbild-Paging zu sein, da es einfacher zu sehen ist, wie sich die beiden Bildschirme verhalten. Für diejenigen, die immer noch den ganzen Bildschirm scrollen möchten, 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.

Verrückter aber sehr nützlicher Befehl ist zz - Es scrollt den Bildschirm, um diese Zeile in der Mitte erscheinen zu lassen. Dies ist hervorragend, um den Code, an dem Sie gerade arbeiten, in den Mittelpunkt Ihrer Aufmerksamkeit zu stellen. Geschwisterbefehle - zt und zb - machen diese Zeile zur obersten oder untersten auf dem Bildschirm, was nicht ganz so nützlich ist.

% findet und springt zu der passenden Klammer.

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

BDE - Löschen Sie das aktuelle Wort von links nach rechts Trennzeichen

df [Raum] - Löschen bis zum nächsten Leerzeichen

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

dd - lösche diese ganze Zeile

ihr (oder yE) - Zieht Text von hier bis zum Ende des Wortes

ce - schneidet das Ende des Wortes durch

Tschüss - kopiert das aktuelle Wort (fragt mich, was "hi" macht!)

Ja - Kopiert die aktuelle Zeile

cc - schneidet die aktuelle Zeile, können Sie auch tun S stattdessen. Es gibt auch eine niedrigere Kappe s der das aktuelle Zeichen schneidet und in den Einfügemodus wechselt.

viwy oder viwc. Yank oder ändern Sie das aktuelle Wort. Schlagen w mehrmals, um jedes nachfolgende Wort auszuwählen, zu verwenden b rückwärts gehen

vi { - Markieren Sie den gesamten Text in den folgenden Klammern. va {- wähle den gesamten Text einschließlich {} s aus

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

b und e bewegen den Cursor Wort für Wort, ähnlich wie Strg + Pfeile normalerweise. Die Definition von Wort ist jedoch ein wenig anders, da mehrere aufeinanderfolgende Delmiters als ein Wort behandelt werden. Wenn Sie in der Mitte eines Wortes beginnen, gelangen Sie durch Drücken von b immer an den Anfang des aktuellen Wortes und jedes nachfolgende b springt zum Anfang des nächsten Wortes. Ähnlich und leicht zu merken, e Ruft den Cursor an das Ende des aktuellen und jedes nachfolgenden Wortes.

ähnlich zu b/eKapital B und E Verschieben Sie den Cursor Wort für Wort, indem Sie nur Leerzeichen als Trennzeichen verwenden.

Hauptstadt D (atme tief durch) Löscht den Rest der Zeile rechts vom Cursor, genauso wie Umschalt + Ende / Entf in normalen Editoren (2 Tasten drücken - Shift + D - statt 3)


225



Eine, die ich selten in den meisten Vim Tutorials finde, aber sie ist UNGLAUBLICH nützlich (zumindest für mich), ist die

g; and g,

um sich durch die Änderungsliste zu bewegen (vorwärts, rückwärts).

Lass mich zeigen, wie ich es benutze. Manchmal muss ich ein Stück Code oder eine Zeichenfolge kopieren und einfügen, sagen wir einen hexadezimalen Farbcode in einer CSS-Datei, also suche ich, springe (egal wo die Übereinstimmung ist), kopiere es und spring dann zurück (g;) nach wo Ich habe den Code bearbeitet, um ihn endlich einzufügen. Keine Notwendigkeit, Marken zu erstellen. Einfacher.

Nur meine 2 Cent.


193



:%!xxd

Machen Sie Vim zu einem Hex-Editor.

:%!xxd -r

Zurückkehren.

Warnung: Wenn Sie nicht mit binary (-b) bearbeiten, können Sie die Datei beschädigen. - Josh Lee in den Kommentaren.


182



gv

Erneutes Auswählen der letzten visuellen Auswahl


116



Manchmal wird eine Einstellung in Ihrer .vimrc durch ein Plugin oder Autocommand überschrieben. Um diesen Fehler zu beheben, verwenden Sie den Befehl: verbose in Verbindung mit: set. Um beispielsweise herauszufinden, wo cindent gesetzt / deaktiviert wurde:

:verbose set cindent?

Dies wird etwas ausgeben wie:

cindent
    Last set from /usr/share/vim/vim71/indent/c.vim

Dies funktioniert auch mit Karten und Highlights. (Danke Joeytwiddle für das Aufzeigen.) Zum Beispiel:

:verbose nmap U
n  U             <C-R>
        Last set from ~/.vimrc

:verbose highlight Normal
Normal         xxx guifg=#dddddd guibg=#111111 font=Inconsolata Medium 14
        Last set from ~/src/vim-holodark/colors/holodark.vim

113



Ich bin mir nicht sicher, ob das überhaupt eine dunkle Ecke ist, aber ich habe es gerade erst gelernt ...

:g/match/y A

wird alle Zeilen, die "match" enthalten, in die "a/@a registrieren. (Die Großschreibung als A macht Vim anhängen Ruckeln, anstatt den Inhalt des vorherigen Registers zu ersetzen.) Ich habe es in letzter Zeit sehr oft beim Erstellen von Internet Explorer-Stylesheets verwendet.


97



:%TOhtml

Erstellt ein HTML-Rendering der aktuellen Datei.


92