it-swarm.com.de

Wie bewegt man den Bildschirm in Vim, ohne den Cursor zu bewegen?

Ich habe kürzlich entdeckt Ctrl+E und Ctrl+Y Kurzbefehle für Vim, die jeweils den Bildschirm um eine Zeile nach oben und unten bewegen, ohne den Cursor zu bewegen.

Kennen Sie einen Befehl, der den Cursor dort belässt, wo er sich befindet, aber den Bildschirm so verschiebt, dass die Zeile mit dem Cursor zur ersten Zeile wird? (Ein Befehl für die letzte Zeile wäre ein netter Bonus).

Ich kann dies erreichen, indem ich manuell drücke Ctrl+E (oder Ctrl+Y) die richtige Anzahl von Malen, aber einen Befehl zu haben, der dies irgendwie direkt tut, wäre nett.

Irgendwelche Ideen?

546
ereOn
  • zz - Bewegen Sie die aktuelle Zeile in die Mitte des Bildschirms
    (Vorsicht mit zz, wenn Sie zufällig haben Caps Lock versehentlich speichern und beenden Sie vim!)
  • zt - Aktuelle Zeile an den oberen Bildschirmrand verschieben
  • zb - Aktuelle Zeile an den unteren Bildschirmrand verschieben
802
Kevin Vaughan

Zusätzlich:

  • Ctrl-y Verschiebt den Bildschirm um eine Zeile nach oben
  • Ctrl-e Verschiebt den Bildschirm eine Zeile nach unten
  • Ctrl-u Bewegt den Cursor und den Bildschirm um eine halbe Seite nach oben
  • Ctrl-d Bewegt den Cursor und den Bildschirm um eine halbe Seite nach unten
  • Ctrl-b Verschiebt den Bildschirm um eine Seite nach oben, Cursor in die letzte Zeile
  • Ctrl-f Verschiebt den Bildschirm um eine Seite nach unten, wobei der Cursor in die erste Zeile zeigt

Ctrl-y und Ctrl-e Ändern Sie die Cursorposition nur, wenn sie vom Bildschirm verschoben wird.

Mit freundlicher Genehmigung von http://www.lagmonster.org/docs/vi2.html

571
Paul Wheeler

Vim setzt voraus, dass sich der Cursor immer auf dem aktuellen Bildschirm befindet. Sie können jedoch die aktuelle Position mit einem Lesezeichen versehen und dann zu Ihrer Position zurückkehren.

mg  # This book marks the current position as g (this can be any letter)
<scroll around>
`g  # return to g
35
GWW

Hier ist meine Lösung in vimrc:

"keep cursor in the middle all the time :)
nnoremap k kzz
nnoremap j jzz
nnoremap p pzz
nnoremap P Pzz
nnoremap G Gzz
nnoremap x xzz
inoremap <ESC> <ESC>zz
nnoremap <ENTER> <ENTER>zz
inoremap <ENTER> <ENTER><ESC>zzi
nnoremap o o<ESC>zza
nnoremap O O<ESC>zza
nnoremap a a<ESC>zza

Damit der Cursor in der Mitte des Bildschirms bleibt und sich der Bildschirm nach oben oder unten bewegt.

13
Henry

So belassen Sie den Cursor bei Verwendung in derselben Spalte Ctrl+DCtrl+FCtrl+BCtrl+UGHMLgg

sie sollten die folgende Option definieren:

:set nostartofline
12

Sie können Ihren Cursorbewegungsbefehlen eine Zahl voranstellen, die diesen Befehl so oft wiederholt

1Ctrl+E Wird besorgt Ctrl+E 10 mal statt eins.

5
yunzen

Möglicherweise finden Sie Antworten auf diese Frage nützlich: Scrolling Vim relativ zum Cursor, benutzerdefinierte Zuordnung : Sie können ScrollToPercent(0) aus dieser Frage verwenden, um dies zu tun.

4
ZyX

zEnter macht genau das, was diese Frage verlangt.

Es funktioniert wo seltsamerweise zz würde nicht funktionieren (vim 7.4.1689 auf Ubuntu 2016.04 LTS ohne spezielle .vimrc)

3
Nicolas Raoul

Manchmal ist es nützlich, Text mit den Tasten K und J zu scrollen. Also habe ich diese "Scroll-Modus" -Funktion in meinem .vimrc (auch auf zs gebunden)

scroll_mode.vim

2
Oleg Khalidov

Überrascht verwendet niemand die Option Abrollen , die den Cursor in der Mitte der Seite hält. Probieren Sie es aus mit:

:set so=999

Es ist die erste empfohlene Methode im Vim-Wiki und funktioniert gut

Es gibt ein neues Plugin, das ich geschrieben habe. Es ermöglicht Ihnen, durch die gesamte Datei zu navigieren, ohne die Cursorposition zu verschieben. Es basiert darauf, die Linien zwischen Ihrer Position und Ihrer Zielposition zu falten und dann über die Falte zu springen. Oder brechen Sie es ab und bewegen Sie sich überhaupt nicht.

Es ist auch einfach, schnell zwischen dem Cursor in der ersten Zeile, dem Cursor in der letzten Zeile und dem Cursor in der Mitte umzuschalten, indem Sie einfach auf j, k oder l klicken (wenn Sie sich im Modus des Plugins befinden).

Ich denke, es würde hier gut passen: https://github.com/anschnapp/move-less

1
snap