Was sind die am häufigsten verwendeten vim-Befehle / Tastendrücke?

110

Ich bin ein Ruby-Programmierer, der versucht, von Textmate zu MacVim zu wechseln, und ich habe Probleme, die gigantischen Listen der Dinge zu durchsuchen, die Sie in VIM tun können, und alle Tastendrücke für sie. Ich habe es satt zu hören "Sie können 'I' zum Einfügen von Text oder 'a' zum Anhängen von Text nach dem Zeichen oder 'A' zum Anhängen von Text am Ende der Zeile verwenden oder ..." kann ich mir nicht vorstellen Jeder verwendet alle 20 verschiedenen Tastendrücke, um durch Text zu navigieren, etwa 10 Tasten, um mit dem Hinzufügen von Text zu beginnen, und 18 Möglichkeiten, einen inneren Block visuell auszuwählen. Oder tust du!?

Mein idealer Spickzettel wären die 30-40 am häufigsten verwendeten Tastendrücke oder Befehle, die jeder täglich zum Schreiben von Code verwendet, zusammen mit den absolut wesentlichen Plugins, die Rubyisten täglich verwenden, und den 10 am häufigsten verwendeten Befehlen für sie. In der Theorie , wenn ich das und beginnt , wie kompetent in VIM immer , wie ich in Textmate bin, dann kann ich anfangen , die Tausende von anderen VIM Befehlen zu lernen , die ich machen mehr effizient.

Oder lerne ich VIM überhaupt falsch?

Clinton
quelle
9
Obligatorischer Verweis auf cafepress.com/geekcheat.11507711 .
Geekosaurier
1
Retagged, um 'Ruby' zu entfernen und 'Tastaturkürzel' hinzuzufügen. Scheint angemessener.
"lerne ich Vim überhaupt falsch?" - Nein, Sie müssen nur mit einigen Grundlagen beginnen und sich daran erinnern, dass Sie in einem Jahr noch mehr Befehle lernen werden. Vielleicht werden Sie eines Tages wirklich alle Befehle verwenden! Aber niemand benutzt sie alle vom ersten Tag an.
Cascabel

Antworten:

304

Hier ist ein Tippblatt, das ich einmal geschrieben habe, mit den Befehlen, die ich tatsächlich regelmäßig benutze:

Verweise

Allgemeines

  • Fast allen Befehlen kann eine Zahl für eine Wiederholungszählung vorangestellt werden. z.B. 5dd 5 Zeilen löschen
  • <Esc> bringt Sie aus jedem Modus heraus und zurück in den Befehlsmodus
  • Befehle mit vorangestelltem : werden in der Befehlszeile am unteren Bildschirmrand ausgeführt
  • : Hilfe Hilfe bei jedem Befehl

Navigation

  • Cursorbewegung: ← hjk l →
  • Mit Worten:
    • w nächstes Wort (durch Interpunktion); W nächstes Wort (durch Leerzeichen)
    • b Rückwort (durch Interpunktion); B hinteres Wort (durch Leerzeichen)
    • das Endwort (durch Interpunktion); E Endwort (durch Leerzeichen)
  • Nach Zeile:
    • 0 Zeilenanfang; ^ erstes Nicht-Leerzeichen
    • $ Zeilenende
  • Nach Absatz:
    • { vorherige leere Zeile; } nächste leere Zeile
  • Nach Datei:
    • gg Dateianfang; G Dateiende
    • 123G gehen zu einer bestimmten Zeilennummer
  • Mit dem Marker:
    • mx setze Markierung x ; 'x gehe zu x markieren
    • '. Gehe zur Position der letzten Bearbeitung
    • '' gehe zurück zum letzten Punkt vor dem Sprung
  • Scrollen:
    • ^ F vorwärts Vollbild; ^ B rückwärts Vollbild
    • ^ D halber Bildschirm unten; ^ U bis halber Bildschirm
    • ^ E eine Zeile nach oben scrollen; ^ Y eine Zeile nach unten scrollen
    • zz mittlere Cursorlinie

Bearbeitung

  • u rückgängig machen; ^ R wiederholen
  • . Wiederholen Sie den letzten Bearbeitungsbefehl

Einfügen

Alle Einfügebefehle werden mit beendet <Esc>, um zum Befehlsmodus zurückzukehren.

  • Ich füge Text am Cursor ein. Ich füge Text am Zeilenanfang ein
  • ein Text nach dem Cursor anhängen; Ein Text nach dem Zeilenende anhängen
  • o neue Zeile unten öffnen; O neue Zeile oben öffnen

Ändern

  • r einzelnes Zeichen ersetzen; R Ersetzen Sie mehrere Zeichen
  • s Einzelzeichen ändern
  • cw Wort ändern; C zum Zeilenende wechseln; cc ganze Zeile ändern
  • c<motion> ändert den Text in Bewegungsrichtung
  • ci ( Änderung in Klammern ( weitere Beispiele finden Sie unter Auswahl von Textobjekten)

Löschen

  • x Zeichen löschen
  • dw Wort löschen; D bis zum Zeilenende löschen; dd ganze Zeile löschen
  • d wird<motion> in Bewegungsrichtung gelöscht

Ausschneiden und Einfügen

  • yy Zeile in Einfügepuffer kopieren; dd Linie in Pastenpuffer schneiden
  • p Puffer unterhalb der Cursorzeile einfügen; P Puffer über der Cursorzeile einfügen
  • xp tausche zwei Zeichen ( x , um ein Zeichen zu löschen, dann p , um es nach der Cursorposition zurückzusetzen)

Blöcke

  • v visueller Blockstrom; V visuelle Blocklinie; ^ V visuelle Blockspalte
    • Die meisten Bewegungsbefehle erweitern den Block auf die neue Cursorposition
    • o bewegt den Cursor zum anderen Ende des Blocks
  • d oder x Block in Pastenpuffer schneiden
  • y Block in Einfügepuffer kopieren
  • > Einrückungsblock; < unindent Block
  • gv wählt den letzten visuellen Block erneut aus

Global

  • :% s / foo / bar / g ersetzen alle Vorkommen von "foo" durch "bar"
    • % ist ein Bereich , der jede Zeile in der Datei angibt
    • / g ist ein Flag, das alle Vorkommen in einer Zeile anstelle nur des ersten ändert

Suchen

  • / vorwärts suchen; ? rückwärts suchen
  • * Suche nach einem Wort unter dem Cursor vorwärts; # Suche rückwärts nach einem Wort unter dem Cursor
  • n nächstes Spiel in die gleiche Richtung; N nächstes Spiel in entgegengesetzter Richtung
  • fx vorwärts zum nächsten Zeichen x ; Fx rückwärts zum vorherigen Zeichen x
  • ;; gehe wieder zu demselben Charakter in dieselbe Richtung; , Bewegen sich wieder gleiche Zeichen in entgegengesetzter Richtung

Dateien

  • : w Datei auf Festplatte schreiben
  • : wname Datei auf Festplatte schreiben alsname
  • ZZ- Datei auf Festplatte schreiben und beenden
  • : n eine neue Datei bearbeiten; : n! Bearbeiten Sie eine neue Datei, ohne die aktuellen Änderungen zu speichern
  • : q Beenden der Bearbeitung einer Datei; : q! Beenden Sie die Bearbeitung, ohne die Änderungen zu speichern
  • : e bearbeite dieselbe Datei erneut (falls außerhalb von vim geändert)
  • : e. Verzeichnis-Explorer

Windows

  • ^ Wn neues Fenster
  • ^ Wj runter zum nächsten Fenster; ^ Wk bis zum vorherigen Fenster
  • ^ W_ aktuelles Fenster maximieren; ^ W = mache alle Fenster gleich groß
  • ^ W + Fenstergröße erhöhen; ^ W- Fenstergröße verringern

Quellennavigation

  • % springen zu passender Klammer / Klammer / Klammer oder Sprachblock, wenn das Sprachmodul geladen ist
  • gd gehe zur Definition des lokalen Symbols unter dem Cursor; ^ O zurück zur vorherigen Position
  • ^] zur Definition des globalen Symbols springen (erfordert tagsDatei); ^ T zurück zur vorherigen Position (beliebiger Stapel von Positionen beibehalten)
  • ^ N (im Einfügemodus) automatische Wortvervollständigung

Lokale Änderungen anzeigen

Vim verfügt über einige Funktionen, mit denen Linien, die gegenüber einer Basisversion in der Quellcodeverwaltung geändert wurden, einfach hervorgehoben werden können. Ich habe ein kleines Vim-Skript erstellt, das dies einfach macht: http://github.com/ghewgill/vim-scmdiff

Greg Hewgill
quelle
1
+1 Relativ minimal, obwohl ich zugeben muss, dass ich keine Fensterbefehle verwende oder mit etwas anderem als den Pfeiltasten / pageup / pagedown / home / end und gg / G navigiere. Oh, und für die Zeilennavigation können Sie auch Folgendes verwenden: 123 (Befehlsmodus).
2
Schönes Cheatsheet. Ich würde ^ w ^ w hinzufügen, um durch Fenster zu blättern : x anstelle von ZZ aus Gründen der Konsistenz, tx vorwärts vor Zeichen und Tx rückwärts.
Romainl
Ich sollte beachten, dass dies nur die Grundlagen meiner Verwendung sind. Ich habe diese Liste erstellt, um anderen Menschen Vim beizubringen. Ich verwende viele andere Befehle weniger häufig und habe auch verschiedene Aliase und Makros eingerichtet, um vim effektiver nutzen zu können.
Greg Hewgill
2
Wenn Sie den EscSchlüssel (und RSI?) Vermeiden möchten , können Sie verwenden ^[. ^cfunktioniert auch (erweitert aber keine Abkürzungen). Quelle: vim.wikia.com/wiki/Avoid_the_escape_key
Lian
22

http://www.viemu.com/a_vi_vim_graphical_cheat_sheet_tutorial.html

Dies ist das Beste, was es je gab, um VIM zu lernen.

Justin Thomas
quelle
Ich habe das noch nie gesehen, eine sehr coole Referenz, nachdem Sie wissen, was die Befehle tun.
Amccormack
3
Der "grafische" Teil ist jedoch nutzlos, wenn Sie keine QWERTY-Tastatur haben.
Romainl
5
Es wundert mich, dass das Posten eines Links (der übrigens bereits zu Tode gepostet wurde) so viel Aufmerksamkeit auf sich zieht, während man die Extrameile geht, die andere Poster nicht setzen ...
Lieven Keersmaekers
Der klare Gewinner in vim Posts: stackoverflow.com/questions/1218390/…
Justin Thomas
4

Haben Sie das integrierte Tutorial von Vim durchgearbeitet? Wenn nicht, gehen Sie zur Befehlszeile und geben Sie ein vimtutor. Es ist eine großartige Möglichkeit, die ersten Befehle zu lernen.

Vim bietet eine unglaubliche Menge an Flexibilität und Leistung. Wenn Sie wie die meisten Vim-Benutzer sind, lernen Sie viele neue Befehle, vergessen alte und lernen sie dann neu. Die integrierte Hilfe ist gut und verdient das regelmäßige Durchsuchen, um neue Dinge zu lernen.

Es gibt mehrere gute FAQs und Cheatsheets für vim im Internet. Ich würde empfehlen, nach vim + faqund zu suchen vim + cheatsheet. Cheat-Sheets.org # vim ist eine gute Quelle, ebenso wie das Vim Tips Wiki .

der Blechmann
quelle
Ich habe gerade davon erfahren und zum Glück ist es auf einem Mac installiert. Probieren Sie es jetzt aus (um 1 Uhr morgens…)
Clinton
Ich benutze vim schon lange und es ist eines der ersten Dinge, die ich auf einem Computer installiere. MacVim ist unter Mac OS sehr schön. Ich kompiliere vim aus dem Quellcode auf den meisten Linux-Boxen, die ich verwende, einfach weil die meisten Distributionen nicht aktuell sind oder die Sprachunterstützung nicht richtig eingestellt ist. Ich halte eine aktuelle Version meiner ~/.vimrc, ~/.gvimrcund ~/.vimVerzeichnis in einem tar-Ball, wenn ich zu Satz etwas nach oben haben. Wenn ich das kopiere und die Dateien extrahiere, kann vim unter Windows, Macs und Linux in wenigen Minuten mit all meinen üblichen Befehlen und Farbschemata ausgeführt werden.
der Blechmann
3

Was die meisten Menschen tun , ist mit den bloßen Grundlagen beginnen, wie vielleicht i, yw, yy, und p. Sie können weiterhin Pfeiltasten verwenden, um sich zu bewegen, Text mit der Maus auszuwählen, die Menüs zu verwenden usw. Wenn Sie dann etwas verlangsamen, suchen Sie nach dem schnelleren Weg und fügen nach und nach immer mehr Befehle hinzu. Möglicherweise lernen Sie für eine Weile einen neuen Befehl pro Tag, dann wird er zu einem pro Woche. Sie werden sich in einem Monat ziemlich produktiv fühlen. Nach einem Jahr haben Sie ein ziemlich solides Repertoire, und nach 2-3 Jahren werden Sie nicht einmal bewusst darüber nachdenken, was Ihre Finger tippen, und es wird seltsam aussehen, wenn Sie es für jemanden buchstabieren müssen. Ich habe vi im Jahr 1993 gelernt und erhalte immer noch 2 oder 3 neue Befehle pro Jahr.

Karl Bielefeldt
quelle
3

@ Greg Hewgills Cheatsheet ist sehr gut. Ich habe vor einigen Monaten mit dem Wechsel von TextMate begonnen. Jetzt bin ich genauso produktiv wie bei TM und staune ständig über Vims Kraft.

Hier ist, wie ich gewechselt habe . Vielleicht kann es Ihnen nützlich sein.

Grosso Modo, ich denke nicht, dass es eine gute Idee ist, einen radikalen Wechsel vorzunehmen. Vim ist ganz anders und es ist am besten, schrittweise zu gehen.

Und um Ihre Unterfrage zu beantworten, ja, ich benutze den ganzen iaIAoOTag, um in den Einfügemodus zu wechseln. Auf den ersten Blick scheint es sicherlich seltsam, aber nach einer Weile denken Sie nicht mehr wirklich darüber nach.

Einige Befehle, die für alle programmierbezogenen Aufgaben unglaublich nützlich sind:

  • rund RZeichen zu ersetzen
  • <C-a>und <C-x>zu erhöhen und verringern Zahlen
  • citden Inhalt eines HTML - Tags zu ändern, und seine Varianten ( cat, dit, dat,ci( , etc.)
  • <C-x><C-o>(zugeordnet ,,) zur Omnicompletion
  • visuelle Blockauswahl mit <C-v>
  • und so weiter…

Sobald Sie auf die Vim Weise sind daran gewöhnt , es wirklich schwierig wird , nicht getroffen ooder die xganze Zeit , wenn der Text in einem anderen Editor oder Textfeld bearbeiten.

romainl
quelle
2

Ich kann mir nicht vorstellen, dass jeder alle 20 verschiedenen Tastendrücke verwendet, um durch Text zu navigieren, etwa 10 Tasten, um mit dem Hinzufügen von Text zu beginnen, und 18 Möglichkeiten, einen inneren Block visuell auszuwählen. Oder tust du!?

Ich mache.

Sobald ich das habe und anfange, VIM genauso gut zu beherrschen wie Textmate, kann ich theoretisch die Tausenden anderer VIM-Befehle lernen, die mich effizienter machen.

Das ist der richtige Weg. Beginnen Sie mit grundlegenden Befehlen und greifen Sie dann auf Befehle zu, die Ihre Produktivität verbessern. Ich folge diesem Blog gerne, um Tipps zu erhalten, wie ich meine Produktivität mit vim verbessern kann.

Jeff
quelle
2

tuxfiles.org hält einen ziemlich guten Spickzettel. Ich denke, es gibt ein paar Punkte, um die Befehle zu lernen:

  • Lesen Sie regelmäßig den Spickzettel. Machen Sie sich keine Sorgen, ob Sie alle verwenden oder sich alle Schlüssel merken möchten. Sie müssen nur wissen, dass der Befehl vorhanden ist. Schlagen Sie den Befehl nach und verwenden Sie ihn, wenn Sie feststellen, dass Sie sich wiederholen.
  • Wenn Sie regelmäßig etwas tun (z. B. eine ganze Zeile nach einem bestimmten Zeichen löschen d$), führen Sie eine schnelle Google-Suche durch, um festzustellen, ob Sie einen Befehl dafür finden können.
  • Schreiben Sie Befehle auf, die Sie für nützlich halten, und bewahren Sie diese Liste dort auf, wo Sie sie sehen können, während Sie Ihren Code schreiben. Ich würde gegen das Ausdrucken von etwas argumentieren und Sie stattdessen ermutigen, Post-It-Notizen nur für wenige Befehle gleichzeitig zu verwenden.
  • Beobachten Sie nach Möglichkeit andere Programmierer, die vim verwenden, und fragen Sie sie, welche Befehle sie verwenden, wenn Sie sehen, dass sie etwas Interessantes tun.

Neben diesen Tipps gibt es einige grundlegende Konzepte, die Sie verstehen sollten.

  • vim verwendet dasselbe Zeichen, um dieselbe Funktion darzustellen. Zum Beispiel, um eine Zeile nach der Verwendung eines Zeichens zu löschen d$. Um eine Zeile nach einem bestimmten Zeichen hervorzuheben, verwenden Sie v$. Beachten $Sie also, dass Sie am Ende der Zeile, von der aus sich Ihr Cursor gerade befindet, etwas tun werden.
  • uwird rückgängig gemacht und ctrl+rwiederholt.
  • Wenn Sie eine Zahl vor einen Befehl stellen, wird dieser wiederholt ausgeführt. 3ddlöscht die Zeile, auf der sich Ihr Cursor befindet, und die beiden folgenden Zeilen. Kopiert auf ähnliche Weise 3yydie Zeile, auf der sich Ihr Cursor befindet, und die beiden folgenden Zeilen.
  • verstehen , wie man navigiert durch die Puffer verwenden , um :lsdie Puffer zu verzeichnen, und :bn,:bp um durch sie.
  • Lesen Sie das Tutorial unter:help Dies ist wahrscheinlich der beste Weg, um die Seile und den Rest der Befehle zu lernen, die Sie durch die Verwendung lernen werden.
Amccormack
quelle
2

Fügen Sie dies in Ihre .bashrc ein, um vim mit der zuletzt bearbeiteten Datei in der zuletzt bearbeiteten Zeile zu öffnen

alias vil="vim  +\"'\"0"
bescheiden
quelle
1

Gehen Sie mit vim zu Efficient Editing und erfahren Sie, was Sie für den Einstieg benötigen. Nicht alles auf dieser Seite ist von Anfang an wichtig, also wählen Sie aus, was Sie wollen.

Verwenden Sie von dort aus vim für alles. "hjkl", "y" und "p" bringen Sie weit, auch wenn es nicht der effizienteste Weg ist. Wenn Sie auf eine Aufgabe stoßen, für die Sie den magischen Schlüssel nicht kennen, um sie effizient (oder überhaupt nicht) auszuführen, und Sie feststellen, dass Sie sie mehr als ein paar Mal ausführen, schauen Sie nach. Nach und nach wird es zur zweiten Natur.

Ich fand vim vor vielen Monden entmutigend (damals, als es am Ende kein "m" hatte), aber es dauerte nur etwa eine Woche, bis es effizient war. Ich finde es immer noch der schnellste Editor, mit dem man Dinge erledigen kann.

mikestew
quelle
Der Link zu "Effizientes Bearbeiten mit vim" ist jetzt tot. Ich denke, eine Alternative kann unter robertames.com/files/vim-editing.html gefunden werden
Damian Powell