VIM Superschnelle Navigation

91

Das einzige, was ich an der Verwendung anderer Editoren vermisse, ist, meinen Platz mit der Maus zu finden. Ich kann mit meinen Augen auf einen bestimmten Bereich in der Datei schauen und mit einer Mausbewegung und einem Klick bin ich da. Mit VIM muss ich jjjjjkkkkkkjjjhhhh ... fast da hhhhh oh Mist, den ich um 3 Zeichen verpasst habe, lll.

Ich lerne Markierungen zu machen und habe ein Lesezeichen-Plugin gefunden, das großartig ist. Ich kann Markierungen erstellen und zerstören und mit ihnen <f3>navigieren. Leider werden die Markierungen vergessen, wenn die Datei geschlossen wird.

Wie navigieren Sie alle super Dateien? Ich weiß, ich könnte auch 5j7k4j5h und so weiter machen, aber es muss ein Plugin geben, das meine Augen lesen und den Cursor dort platzieren kann, wo ich ihn wirklich brauche.

Ich habe auch gelernt, mit /% nach einem bestimmten Begriff zu suchen. Es hilft, aber alle übereinstimmenden Zeichen werden im gesamten Dokument hervorgehoben.

Helmut Granda
quelle
Tolle Antworten, während wir uns noch mit dem Thema befassen, dachte ich, ich kann mit etwas wie nG (gehe zur Zeilennummer) f% experimentieren (finde das erste Zeichen von dem, wonach ich suche, oder wie jemand vorgeschlagen hat, benutze das w, um vorwärts zu kommen zum nächsten Wort.
Helmut Granda

Antworten:

171

Versuchen Sie $ vimtutor, es wird Ihnen alles beibringen, was Sie wissen müssen, um loszulegen.

hjkl sind die Spitze der Spitze des Eisbergs und werden zumindest in meinem Fall sehr selten verwendet.

wWEeund BbgegEalle erlauben es, sich Wort für Wort zu bewegen:

  • wund egehen Sie vorwärts Wund Eberücksichtigen Sie Leerzeichen und Interpunktion

    " here the * marks the default location of the cursor
    " and each letter shows where you jump when you hit the key.
    
    Latin: Lorem ipsum dolor sit amet.
                       *   e   e    e
                       *   E   E     E
    *    w w     w     w     w   w   w
    *      W     W     W     W   W   W
    
  • bund gegehe rückwärts Bund gEberücksichtige Leerzeichen und Interpunktion

    Latin: Lorem ipsum dolor sit amet.
    b    b b     b     *
    B      B     B     *
         ge    ge    ge*
        ge
         gE    gE    gE*
    

fFtTwerden verwendet, um nach einem bestimmten Zeichen in der aktuellen Zeile zu greifen , und ;,werden verwendet, um diese Bewegung zu wiederholen, in derselben Richtung für ;und in der entgegengesetzten Richtung für ,:

  • fmspringt beim nächsten mvorwärts, Fgeht rückwärts

    Latin: Lorem ipsum dolor sit amet.
    *          fm    ;            ;
               ;     Fm          *
    
  • tmspringt VOR dem nächsten mvorwärts, Tgeht rückwärts

    Latin: Lorem ipsum dolor sit amet.
    *         tm    ;            ;
              ;     Tm           *
    

/? werden verwendet, um von der aktuellen Cursorposition zum ersten Auftreten eines Musters zu springen:

  • /pattern geht vorwärts

    Latin: Lorem ipsum dolor sit amet.
    *            /ips
    
  • ?pattern geht rückwärts

    Latin: Lorem ipsum dolor sit amet.
    ?Lat             *
    

0$ werden verwendet, um zum ersten und letzten Zeichen der Zeile zu springen.

    (whitespace)Latin: Lorem ipsum dolor sit amet.(whitespace)
    0                  *                                     $

^g_ werden verwendet, um zum ersten und letzten druckbaren Zeichen der Zeile zu springen.

    (whitespace)Latin: Lorem ipsum dolor sit amet.(whitespace)
                ^      *                         g_

Einfach und kombiniert ()[]{}werden verwendet, um Phrase für Phrase oder Absatz für Absatz oder Code Block für Codeblock zu verschieben.

<C-b> und <C-f> werden verwendet, um durch den Bildschirm vorwärts und rückwärts zu scrollen.

<C-u> und <C-d> werden verwendet, um durch den halben Bildschirm vorwärts und rückwärts zu scrollen.

H, M Und um Lden Cursor nach oben, Mitte, unten in der Ansicht bewegen, respectively.

zt, zz Und zbdie Linie unter dem Cursor nach oben, Mitte, unten in der Ansicht bewegen, respectively.

Und so weiter.

:help motion.txt wird dich umhauen.

romainl
quelle
17
Normalerweise mache ich das nicht, aber dieser Kommentar soll Ihnen nur sagen, dass dies eine großartige Antwort ist!
Jojo
Aus irgendeinem Grund hatte ich noch nie H, M oder L verwendet, tolle Tipps!
Chris
Hinzu , dass ]}und [{(2 Anschläge) Sprung zum Ende oder Anfang eines Bereichs (zB einen , der durch{ ... }
Matthew Woo
3
Nun, dies beantwortet die Frage von OP immer noch nicht wirklich how to jump to a line he's seeing like using a mouse. Ich kenne und verwende ständig alle von Ihnen erwähnten Tastenkombinationen. Aber es ist immer noch nicht so effizient wie das Zeigen einer Maus beim Springen über große Entfernungen.
Penghe Geng
Ja, H, M, L sind leicht zu merken: Hoch, Mittel, Niedrig;) @Chris
nils petersohn
25

Neben dem Bewegungsbefehl von vim finde ich, dass ein vim-Plugin namens EasyMotion sehr nützlich für die Navigation ist. Wenn Sie mit vimperator oder pentadactyl vertraut sind, bringt EasyMotion einfach den Hinweismodus zurück zu vim. Hier ist eine animierte Demo und hier ist das Video-Tutorial. Hoffe es ist hilfreich für dich.

Vincent
quelle
Der Vorteil von easymotion ist, dass Sie mit nur 3 Tastenanschlägen überall auf dem Bildschirm hingehen können.
Xavier T.
+1: EasyMotion ist wirklich ein Jetpack von Vims Bewegung. (Übrigens auch PreciseJump. Eigentlich ist EasyMotion ein Sohn von PreciseJump)
Dmitry Frank
2
Wie zum Teufel hat der Autor von EasyMotion diese super tolle Statuszeile in der Demo bekommen?
Cyrille
1
Die 'Super Awesome Status Line' ist ein Plugin namens 'Powerline'. Es ist hier: vim.org/scripts/script.php?script_id=3881
DEzra
Könnten Sie bitte die animierte Demo-URL aktualisieren? es funktioniert nicht mehr
brauliobo
20

Es gibt unzählige Möglichkeiten, sich in vim zu bewegen. Dies ist einer der wirklich starken Bereiche. Ich benutze {und }viel, die sich in dieser Richtung bis zur nächsten leeren Zeile auf und ab bewegen. %ist nützlich, um zu einer passenden Halterung (jeglicher Art) hin und her zu gehen. Wund Bbewege dich vorwärts und rückwärts durch ein "Wort".

Es könnte sich lohnen, den Abschnitt " Bewegen " des Vim-Handbuchs zu lesen.

Greg Hewgill
quelle
4
Erwähnenswert ist wahrscheinlich auch das Auf- und Abblättern mit Ctl + U bzw. Ctl + D.
Nick
10

vim hat mausunterstützung! Probieren Sie es aus (in Ihrer .vimrc):

set mouse=a

Nebenbemerkung : Als Bildschirmbenutzer habe ich festgestellt, dass ich auch brauche

set ttymouse=xterm2

damit dies funktioniert.

rgcb
quelle
4
Gut zu wissen, aber ich werde weiterhin ohne die Maus nach der perfekten schnellen Navigation suchen.
Helmut Granda
9

persönlich bevorzuge ich:

"/<chars><enter>" to quickly move to somewhere   ( extremely fast! trust me! )
":<number>" to go to some line, 
"ctrl + f/b" to forward/back
"g;" to move to the last editing place.
"w/b" to move by word
"jklh" to move your cursor to the exact position
Siwei Shen 申思维
quelle
5

Mit der Option relativenumber( : help relativeumber - in Vim 7.3 enthalten ) gelangen Sie mit dem a [count]koder [count]jBewegung zur Linie unter Ihren Augen, mit der Sie sich in der aktuellen Linie mit Bewegungen bewegen können, wie ftwebvon @romainl erläutert.

mMontu
quelle
Tolle Option. Schneller als Leichtigkeit.
Penghe Geng
5

Abgesehen von {, }, (, ), <number>cb, <number>cB, <number>cWund %verwende ich solche Navigationstechniken:

  • ciw, diw( ciW, diW). usw., um Wörter unter dem Cursor schnell zu bearbeiten / löschen (einschließlich Nicht-Leerzeichen)
  • ci(, ci"( ca(, ca") usw. zum schnellen Bearbeiten in Klammern, Anführungszeichen (einschließlich Klammern, Anführungszeichen). Gleiches gilt für d.
  • Markiert mit GROSSBUCHSTABEN, um sie global (dateiübergreifend) und dauerhaft (wenn der Puffer geschlossen ist) festzulegen. mAErstellen Sie beispielsweise eine globale Markierung A, die mit dem 'ABefehl verfügbar ist (oder `Aum die Spalte zu respektieren).
  • gf um schnell zur Datei unter dem Cursor zu gelangen
  • f, t( F, T), um zum Zeichen vor dem Zeichen rechts (links) zu gelangen ( ;zum Wiederholen verwenden). Diese sind besonders nützlich für dund cBefehle ( .zum Wiederholen verwenden).
  • ^]zum Tag und ^Tzurück.

Und viele andere Möglichkeiten, sich zu bewegen :)

Weitere Informationen finden Sie hier: http://www.thegeekstuff.com/2009/03/8-essential-vim-editor-navigation-fundamentals/

PS Für Rails-Benutzer gibt es ein sehr nützliches Rails-Vim-Plugin. Vielleicht möchten Sie es auch ausprobieren.

Penkovsky
quelle
3

Dies ist ein guter Ort, um die wichtigsten Navigationsbefehle zu lernen. Ein Teil der Kraft / Geschwindigkeit von vim ergibt sich aus der Kombination von Bewegung mit Aktion, dh cw-> Wort ändern, d10j-> 10 Zeilen nach unten löschen usw. Auch dies und das sind interessante Lesarten.

TI
quelle
2

Sie können :set nohlsearchdie Markierung Ihrer Suchzeichen deaktivieren.

Ich navigiere auch viel mit ctags.

Richo
quelle
github.com/richoH/dotfiles/blob/master/vimrc Möglicherweise finden Sie dort einige andere nützliche Dinge.
Richo
Vielen Dank für den Tipp. Ich habe Ihr vimrc durchgesehen und Ihre Notiz gefunden, in der Sie die Zeile hervorgehoben haben, wenn Sie beim Schreiben von E-Mails oder Dokumenten 80 Zeichen erreichen. Warum sollten Sie eine E-Mail in VIM schreiben? Ich kann ein Dokument für Ihren persönlichen Gebrauch verstehen, bin mir aber bei einer E-Mail nicht sicher.
Helmut Granda
Ich benutze mutt + vim, um den größten Teil meiner E-Mails zu lesen und zu schreiben. Ich benutze auch das Plugin "Es ist alles Text", um viele Webinhalte in vim zu schreiben. Ich habe den Zeilenumbruch für E-Mails aktiviert, aber für Links usw. kann es nützlich sein, eine Erinnerung zu haben, wenn ich nicht richtig formatiert habe oder wenn verschachtelte Anführungszeichen zu lang werden.
Richo
0

Ich habe ein Plugin für die superschnelle Navigation geschrieben, es heißt bewegungslos:

https://github.com/anschnapp/move-less

Sie können die h j k lgesamte Datei bequem durchsuchen, indem Sie mit ( -keys) scrollen . Sie ändern Ihre Cursorposition nicht, während Sie durch die Lochstelle scrollen (basierend auf dem Falttrick). Wenn Sie Ihre Suche abbrechen, sind Sie genau dort, wo Sie begonnen haben.

Für eine superschnelle Navigation besteht die Absicht darin, mein Plugin zu verwenden, um die Zielposition auf dem Bildschirm zu erhalten und dann über easymotion (was bereits aus einer anderen Antwort empfohlen wurde) zur richtigen Position zu springen:

https://github.com/easymotion/vim-easymotion

Wenn Sie beide kombinieren, können Sie sogar den Sprungverlauf vorantreiben und einfach über <c-o>und zwischen Ihrem Ursprungs- und Zielziel springen <c-i>.

einrasten
quelle