Wie bewege ich mich in Vim zum Zeilenende?

1193

Ich weiß, wie man sich im Befehlsmodus im Allgemeinen bewegt, insbesondere zum Springen zu Zeilen usw. Aber wie lautet der Befehl, um zum Ende der Zeile zu springen, in der ich mich gerade befinde?

salt.racer
quelle
19
Grundlegende vim-Befehle in weniger als 10 Minuten youtube.com/watch?v=71YTkxUNwmg
eomeroff
14
Was ist falsch daran, ein paar Minuten durch vimtutor zu laufen? Es ist bereits Teil Ihrer Vim-Installation und zeigt Ihnen die Grundlagen.
Dash-Tom-Bang
@ dash-tom-bang Nun, sie haben hier eine ziemlich hohe Punktzahl ... :) Aber ja, du hast Recht, vimtutorist großartig. Wahrscheinlich wussten sie nichts davon?
Pryftan

Antworten:

2050

Nur die Taste $ (Dollarzeichen) . Sie können Adamit zum Ende der Zeile wechseln und in den Bearbeitungsmodus wechseln (Anhängen). Um das letzte Nicht-Leerzeichen zu springen, können Sie drücken gdann _Tasten.

Das Gegenteil von Aist I(Einfügemodus am Zeilenanfang). Wenn Sie nur die Taste drücken, ^wird der Cursor auf das erste Nicht-Leerzeichen der Zeile gesetzt.

dvorak
quelle
81
Zum letzten nicht leeren g_
springen
2
Manchmal ist die g_Variation nützlicher, da sie keine leeren Zeichen enthält
Rogercampos
6
Die Variante _g ist sehr nützlich, wenn Sie im visuellen Modus arbeiten, da Sie die Zeile ohne Zeilenumbruch am Ende verwenden können.
Greg Robbins
2
Während die Home- und End-Tasten auf einer normalen Tastatur funktionieren, werden $ und ^ benötigt, wenn Sie einen Laptop verwenden :)
Sridhar Sarnobat
Sie sollten ^ zur Liste hinzufügen.
Tek
304

Wie viele Leute gesagt haben:

  • $ bringt Sie ans Ende der Linie

aber auch:

  • ^oder _bringt Sie zum ersten Nicht-Leerzeichen in der Zeile und
  • 0(Null) bringt Sie zum Zeilenanfang inkl. Leerzeichen
Rob Wells
quelle
Ich wusste | bringt uns zum Anfang der Zeile, aber mir war 0 nicht bekannt. Also sowohl 0 als auch | genau das Gleiche tun, ja?
Kamran Bigdely
8
@kami: Obwohl die Beschreibungen unterschiedlich sind, scheinen sie sich identisch zu verhalten. Der Pipe- |Befehl kann jedoch gezählt werden, z. B. 3 | zur dritten Spalte springen.
Paul Ruane
136
  • $ bewegt sich zum letzten Zeichen in der Zeile.
  • g _ geht zum letzten Nicht-Leerzeichen.

  • g $ geht zum Ende der Bildschirmzeile (wenn eine Pufferzeile über mehrere Bildschirmzeilen gewickelt ist)

Paul Ruane
quelle
Ich denke, g_ ist das gleiche wie $ b
Dave Aaron Smith
3
@ DaveAaronSmith: bgeht zum Anfang des vorherigen Wortes, was überhaupt nicht dasselbe ist. Es ist ungefähr gleichbedeutend mit $ge.
Paul Ruane
9
Ich benutze _und g_zum visuellen / Ziehen, da $auch das neue Zeilenzeichen (LN) kopiert / gelöscht wird.
Ernest
Für mich geht $ an das Ende der aktuellen Bildschirmzeile (wenn umbrochen). Ich habe es nicht geschafft herauszufinden warum. g_ist der einzige Weg, den ich gefunden habe, um zum eigentlichen Ende der Linie zu gelangen.
Ezuk
@ezuk $geht bis zum Ende der Zeile, auch wenn es für mich eingewickelt ist. Ich kenne keine Einstellung, um sein Verhalten anzupassen. Vielleicht wurde es von Ihrer .vimrc neu zugeordnet g$?
Paul Ruane
66

Die Hauptfrage - Zeilenende

$ geht zum Zeilenende, bleibt im Befehlsmodus

A geht zum Zeilenende, wechselt in den Einfügemodus

Umgekehrt - Zeilenanfang (technisch das erste Nicht-Leerzeichen )

^ geht zum Zeilenanfang, bleibt im Befehlsmodus

I (Großbuchstabe i) wechselt zum Zeilenanfang und wechselt in den Einfügemodus

Weiter - Zeilenanfang (technisch die erste Spalte unabhängig vom Leerzeichen )

0 (Null) geht zum Zeilenanfang, bleibt im Befehlsmodus

0i (Null gefolgt von Kleinbuchstaben i) wechselt zum Zeilenanfang und wechselt in den Einfügemodus

Für diejenigen, die anfangen, vi zu lernen, finden Sie hier eine gute Einführung in vi, indem Sie nebeneinander vi-Befehle für typische Cursorbewegungen und Tastenkombinationen des Windows-GUI-Editors auflisten.

vi Editor für Windows-Benutzer

ap-osd
quelle
3
Das Analogon zu Iist nicht 0aber ^, da beide Iund ^zum ersten Nicht-Leerzeichen der Zeile gehen, sondern 0zur Spalte Null gehen (wie der Name schon sagt).
wchargin
@wchargin wahr, dachte ich kann nicht finden, was das Analogon 0wäre? (Gehe zum ersten Zeichen (= Spalte 0) der Zeile und gehe in den Einfügemodus.)
franssu
@franssu: Der einzige, den ich kenne, ist 0i. :-)
wchargin
@wchargin - Danke für die technische Korrektheit. Ich habe den Beitrag aktualisiert.
ap-osd
42

Wenn Ihre aktuelle Zeile den sichtbaren Bildschirm in die nächste Zeile umschließt, können Sie mit g $ zum Ende der Bildschirmzeile gelangen .

Commodore Jaeger
quelle
3
Ich habe gerade festgestellt, dass die Auf- und Ab-Befehle mit g vim den Cursor bildschirmbasiert und nicht zeilenbasiert bewegen. Dh gj und gk ermöglichen es Ihnen, sich auf einer langen Linie auf und ab zu bewegen. Sehr nützlich.
Druckles
1
Außerdem wurde festgestellt, dass die Eingabe von gw und etwas j und k permanent zu ändern scheint, um sich so zu verhalten. Ich weiß nicht wie oder warum. Kann jemand das erklären?
Druckles
4
@Druckles: Eine etwas späte Antwort, aber wenn Sie sich immer noch fragen (oder wenn jemand anderes dies liest) gwund gqBefehle sind, die Text neu formatieren. (siehe :h gwund :h gq) Was wahrscheinlich passiert ist, war, dass Sie gw{motion}Text geändert haben, sodass die Bildschirmzeilen den tatsächlichen Zeilen entsprachen.
Pandubear
14

Das Dollarzeichen: $

David Singer
quelle
13

In vielen Fällen, wenn wir uns in einer Zeichenfolge befinden, werden wir von einem doppelten Anführungszeichen eingeschlossen, oder wenn wir eine Anweisung schreiben, möchten wir nicht die Esc-Taste drücken und mit der Pfeiltaste zum Ende dieser Zeile gehen und das Semikolon ( ;) drücken, um zu enden die Linie. Schreiben Sie die folgende Zeile in Ihre vimrc- Datei:

imap <C-l> <Esc>$a

Was sagt die Zeile? Es ordnet Strg + l einer Reihe von Befehlen zu. Dies entspricht dem gleichzeitigen Drücken von Esc(Befehlsmodus), $(Zeilenende), a(Anhängen).

Pramod
quelle
Danke dafür. Ich wollte Strg-e wieder zu meinem vim hinzufügen, um wie bei meiner ersten Maschine ans Ende der Zeile zu gehen, und wusste nicht wie
tristanbailey
1
Wie in der akzeptierten Antwort angegeben, können Sie A drücken, um dasselbe zu tun.
Tryse
4
@trysis Sie missverstanden, dies bewegt sich nicht aus dem Bearbeitungsmodus, was sehr schön ist.
Marconi
2
Du hast recht. vimMit solchen Dingen können Sie sicherlich viel mehr in viel kürzerer Zeit erreichen. @razorxpress wäre eine geringfügige Anpassung imap <C-l> <Esc>A, bei der Strg + l dem Drücken von Esc(Einfügemodus Abeenden ) und dann (am Zeilenende anhängen) entspricht.
Tryse
3
Ich denke, der idiomatischere Weg, dies abzubilden, wäreinoremap <C-l> <C-o>A
bennyty
12

Der Vorteil der Taste 'Ende' besteht darin, dass sie sowohl im normalen als auch im Einfügemodus funktioniert.

'$' funktioniert nur im Normal- / Befehlsmodus, aber auch im klassischen vi-Editor (gut zu wissen, wenn vim nicht verfügbar ist).

Diastrophismus
quelle
38
Wofür hängst du im Einfügemodus herum ?! Kein gewöhnlicher anständiger Bürger geht nach Tageslicht dorthin. Sie wissen, was dort passiert, nicht wahr? Code verschwindet dort, weißt du? Es verschwindet und wird nie wieder gehört.
Turm
3
Vielen Dank dafür, da ich nach dem Aufrufen gerne im Einfügemodus bleiben möchte. Leider hat mein Laptop keinen Endschlüssel. :(
Ray
12

Beachten Sie auch die Unterscheidung zwischen Linie (oder vielleicht physikalischer Linie) und Bildschirmlinie . Eine Zeile wird durch das Zeilenendezeichen ("\ n") abgeschlossen. Eine Bildschirmzeile ist das, was gerade als eine Zeichenzeile in Ihrem Terminal oder auf Ihrem Bildschirm angezeigt wird. Die beiden werden getrennt, wenn Sie physische Linien haben, die länger als die Bildschirmbreite sind, was beim Schreiben von E-Mails und dergleichen sehr häufig vorkommt.

Die Unterscheidung wird auch in den Zeilenendebefehlen angezeigt.

  • $und 0zum Ende oder Anfang der physischen Zeile bzw. des Absatzes gehen:
  • g$und g0bewegen Sie sich zum Ende oder Anfang der Bildschirmzeile bzw. des Absatzes.

Wenn Sie immer das letztere Verhalten bevorzugen, können Sie die Schlüssel folgendermaßen neu zuordnen:

:noremap 0 g0
:noremap $ g$
loevborg
quelle
1
Wie komme ich zum letzten Nicht-Leerzeichen der Zeile? (ob es eine Bildschirmlinie oder eine physische Linie ist)
Kamran Bigdely
g_ist das letzte Nicht-Leerzeichen der physischen Linie. Wie wäre es mit Bildschirmzeile?
Tryse
10

Drücken Sie A, um am Ende der Zeile in den Bearbeitungsmodus zu wechseln.

Brian
quelle
9

Oder es gibt die offensichtliche Antwort: Verwenden Sie die EndTaste, um zum Ende der Zeile zu gelangen.

davr
quelle
1
Ja, das Mac-Terminal ist eines, bei dem ich bemerkt habe, dass es Schlüssel entführt und sie nicht an das Material weitergibt, das im Terminal läuft. Eines der Dinge, die mich nerven, wenn ich ein bisschen einen Mac benutze.
Davr
Der springende Punkt bei der Verwendung von vim ist, dass keine Schlüssel wie 'End' verwendet werden müssen. Verlasse niemals die Hausreihe.
Jon Thoroddsen
7
Auf dem Mac gibt es keine End-Taste.
Kenorb
1
@kenorb Es gab, als ich den Kommentar gepostet habe ... aber Apple entfernt im Laufe der Jahre gerne Funktionen. netdna.webdesignerdepot.com/uploads/2009/01/… Dies ist tatsächlich eine meiner Lieblingstastaturen aller Zeiten
Davr
9

Ich kann keinen Hotkey für MacBook zur Verwendung von vim im Standardterminal sehen. Hoffe es wird jemandem helfen. Für MacOS-Benutzer (getestet auf MacBook Pro 2018):

fn + - zur Anfangszeile gehen

fn + - zur Endzeile gehen

fn + - Seite nach oben verschieben

fn + - Seite nach unten verschieben

fn + g - Bewegen Sie den Cursor an den Anfang des Dokuments

fn+ shift + g - Bewegen Sie den Cursor an das Ende des Dokuments

Für die letzten beiden Befehle muss manchmal zweimal getippt werden.

Alexander Yushko
quelle
6

Möglicherweise ohne Bezug, aber wenn Sie eine neue Zeile nach der aktuellen Zeile beginnen möchten, können Sie o an einer beliebigen Stelle in der Zeile verwenden.

greywh
quelle
3

Die einfachste Möglichkeit wäre die Eingabe $. Wenn Sie mit Textblöcken arbeiten, können Sie den Befehl {und }das Verschieben eines Absatzes vorwärts bzw. rückwärts zu schätzen wissen .

Paranza
quelle
2

Ich war es gewohnt, mit Home / End im Einfügemodus (von Windows und Linux) an den Anfang und das Ende von Zeilen zu gelangen, was der Mac nicht unterstützt. Dies ist besonders ärgerlich, da ich vim auf einem Remote-System nicht einfach ausführen kann. Nach einigen schmerzhaften Versuchen und Irrtümern kam ich auf diese .vimrcZeilen, die dasselbe tun, aber für den Zeilenanfang an Strg-A und für das Zeilenende an Strg-D gebunden sind. (Aus irgendeinem Grund ist Strg-E vermutlich reserviert, oder ich konnte zumindest keinen Weg finden, es zu binden.) Viel Spaß.

:imap <Char-1> <Char-15>:normal 0<Char-13>
:imap <Char-4> <Char-15>:normal $<Char-13>

Hier gibt es eine gute Tabelle für die ASCII-Steuerzeichencodes, auch für andere:

http://www.physics.udel.edu/~watson/scen103/ascii.html

Sie können auch Strg-V + Strg- ausführen, aber das wird an solchen Stellen nicht so gut eingefügt.

Marcus
quelle