Bewegen Sie die x-Zeilen des Cursors von der aktuellen Position in vi / vim

78

Gibt es eine Möglichkeit, den Cursor in vi / vim um eine relative Anzahl von Zeilen zu bewegen? Angenommen, Sie haben den Cursor 10 Zeilen unter einem Codeblock, den Sie entfernen möchten. Wenn Sie die Zeilennummern in relativer Reihenfolge angezeigt haben, wäre es schön, einen Befehl "10 Zeilen hochspringen" zu haben, der Sie dorthin führt.

Oder ist es vielleicht besser, die absoluten Zeilennummern anzuzeigen und xgg zu gehen, wobei x die Zeilennummer ist?

Eric Leschinski
quelle
Wenn Sie es mehrmals wiederholen: superuser.com/questions/429917/...
toliveira

Antworten:

120

Ja, natürlich gibt es einen Weg. jund kbewege dich eine Zeile nach unten und oben, also 10jund 10kbewege dich zehn Zeilen nach unten und oben. Sie können jede Bewegung wiederholen, indem Sie eine Zahl davor setzen.

Vielleicht möchten Sie auch, set relativenumberwenn Sie viel tun - dies hilft Ihnen beim Zählen, indem Sie Zeilennummern relativ zur aktuellen Zeile anstelle von absoluten Zahlen drucken.

Cascabel
quelle
Vielen Dank! Ich hätte herausfinden sollen, dass die Anzahl auch für die Verschiebungsbefehle gilt. Du hast meinen Tag gerettet!
1
Seit Vim 7.4 können sowohl relative als auch absolute Zeilennummern gleichzeitig angezeigt werden, indem Folgendes zu .vimrc set relativenumberund hinzugefügt wird set number. Dies gibt relative Zeilennummern mit einer absoluten Zeilennummer für die Zeile an, auf der sich Ihr Cursor befindet.
Isaac Gregson
2
Sie können auch eine Reihe von Zeilen nach unten verschieben, indem Sie einfach die Zahl gefolgt von eingeben enter(für absolute Zeilennummern einfach einen Doppelpunkt voranstellen). Wenn Sie es gewohnt sind jund kund eine normale Tastaturlayout sein , dass nicht allzu hilfreich, aber wie ein Pfeil betriebene Colemak Benutzer, enterist leichter zu erreichen als die Colemak j(die QWERTY - yTaste)
SnoringFrog
48

Das Verschieben von 10 Zeilen nach oben und unten passt möglicherweise nicht zu Ihrer Aufgabe und anderen Optionen. Betrachten Sie andere Bewegungen:

Ctrlf, CtrlbSeite nach vorn und zurück.

}, {Bewegt durch einen Absatz nach vorn und zurück.

Sie können Regeln in Ihr vimrc schreiben, um sie 10jan einen Schlüssel zu binden , z. B. Jum 10 Zeilen nach unten zu verschieben, indem Sie Ihrer vimrc-Datei die folgende Zeile hinzufügen: map <S-j> 10j

Sie würden jedoch den nützlichen vorhandenen JBefehl überschreiben (zwei Zeilen verbinden). Es kann schwierig sein, eine gut positionierte, nicht verwendete Tastenkombination für 10j/ 10kzu finden. Daher empfehle ich, die vorhandenen Bewegungen zu verwenden, die ich erwähnt habe.

Vielleicht möchten Sie auch wissen, dass Sie rückwärts zu einem Wort gehen können, das Sie sehen, indem Sie es tun: ?somewordund vorwärts zu einem Wort, das Sie sehen, indem Sie es tun /someword. Diese sind schneller als der Versuch, 10 Zeilen nach oben / unten zu bewegen und dann den Cursor an der genauen Position neu zu positionieren. Wenn Ihnen keine einfache Suchzeichenfolge für die betreffende Zeile einfällt, können Sie jederzeit zur Zeilennummer wechseln, wie Sie gesagt haben ( xgg).

Olhovsky
quelle
Seite hoch und runter hat erreicht, wonach ich gesucht habe!
Jeremyjjbrown
1
Ich benutze die ganze Zeit Strg-F und Strg-B, habe aber {,} übersehen, was vielleicht die beste Granularität für die Bearbeitung von Code ist! Vielen Dank!
Thomson Comer
Es ist nahezu unmöglich, genau zu wissen, wie viele Linien man bewegen muss. {und} sind meine bevorzugte Option.
Andrejs
11

Ich habe mit vim rumgespielt und festgestellt , dass du -dich nach oben und +unten bewegst, damit du:

10-

oder Sie könnten verwenden, kda Sie höchstwahrscheinlich an hjk lCursorbewegungen gewöhnt sind.

Cilan
quelle
3
Das Vorwärtsbewegen enterfunktioniert genauso wie +nach einer Zahl und ist die meiste Zeit leichter zu erreichen
SnoringFrog
@SnoringFrog Ja, aber das ist nur so, dass es eine Beziehung zwischen auf und ab geben kann; Ich meine nicht, dass sich jemand so auf und ab bewegt, denn hjkl wäre sowieso der schnellste.
Cilan