2010-08-11 3 views
461

Ich habe kürzlich entdeckt Ctrl + E und Ctrl + Y Kombinationen für Vim, die jeweils den Bildschirm nach oben und unten bewegen mit einer Zeile Schritt ohne den Cursor zu bewegen.Wie bewegt man den Bildschirm, ohne den Cursor in Vim zu bewegen?

Kennen Sie einen Befehl, der den Cursor dort belässt, wo er sich befindet, aber den Bildschirm so bewegt, dass die Zeile mit dem Cursor zur ersten Zeile wird? (Einen Befehl für die letzte Zeile zu haben wäre ein schöner Bonus).

Ich kann dies erreichen, indem sie manuell Ctrl +E (oder Ctrl +Y), um die richtige Anzahl, wie oft drücken, sondern einen Befehl hat, die irgendwie tut dies würde direkt schön.

Irgendwelche Ideen?

Antwort

658
  • zz - aktuelle Zeile in die Mitte des Bildschirms
    (Vorsicht mit zz bewegen, wenn Sie Caps haben passieren Sperren versehentlich, Sie speichern und beenden vim!)
  • zt - aktuelle Zeile zum oberen Rand des Bildschirms bewegen
  • zb - Stromleitung an den Boden des Bildschirm
+9

** zz ** Genie! Vielen Dank. – Costa

+21

Vorsicht mit * z z * - wenn Sie zufälligerweise _Caps Lock_ on haben, speichern und beenden Sie vim! –

+3

@HappyGreenKidNaps Nachdem viele Leute sich durch vim gekämpft haben, ist Ihr Rat hier lehrreicher als warnen;) –

27

Vim erfordert, dass sich der Cursor zu jeder Zeit im aktuellen Bildschirm befindet. Sie können jedoch die aktuelle Position mit einem Lesezeichen versehen und dann dorthin zurückkehren, wo Sie waren.

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

beachten Sie, dass, wenn Sie über das Gehen auf die Lesezeichen versehenen Zeile kümmern, könnten Sie benutze 'g –

+1

"Vim benötigt den Cursor immer im aktuellen Bildschirm" Vim Benutzer rühmen sich, dass alles in vim konfigurierbar ist. Dieser ist es nicht. Ich möchte nicht, dass mein Cursor bewegt wird, während ich durch die Datei scrolle. Dealbreaker für mich – gadelat

+4

Ich hatte noch nie eine Situation, in der ich den Cursor irgendwo sehen wollte, wo man ihn nicht sehen konnte. Sicher, der Cursor bewegt sich beim Scrollen, aber Sie können dorthin zurückgehen, wo Sie trivial waren (so dass Sie sehen können, wo Sie eigentlich waren, nicht nur raten). Doppel-Back-Tick für eins, 'Ctrl-O' für ein anderes wirklich tolles, und" Backtick, Punkt "bringt Sie zurück, wo Sie zuletzt bearbeitet haben. –

453

Zusätzlich bewegen :

  • Ctrl - y Verschiebt screenen eine Zeile
  • Ctrl - e Verschiebt Bildschirm nach unten eine Zeile
  • Ctrl - u Bewegt den Cursor & Bildschirm ½ Seite
  • Ctrl - d Bewegt den Cursor & Bildschirm nach unten ½ Seite
  • Ctrl - b Verschiebt screenen eine Seite, Cursor letzte Zeile bis
  • Ctrl - f Verschiebt Bildschirm nach unten eine Seite, Cursor auf erste Zeile

Ctrl - y und Strg - e Ändern Sie nur den Cursor po ob es vom Bildschirm verschoben würde.

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

+4

Irgendwelche Mnenomics, um sich daran zu erinnern? .. – ulidtko

+63

@ulidtko: efter (nach auf Schwedisch), yore (bedeutet die Vergangenheit), up, down, back, forward . (Die Wörter vor und zurück sind länger als oben und unten, also bewegen sie den Bildschirm natürlich eine längere Strecke;) – Moberg

+0

@Moberg, schön! Danke. – ulidtko

2

Manchmal ist es sinnvoll, Text mit K und J Tasten zu scrollen. Also ich habe diese "scroll mode" -Funktion in meinem.vimrc (auch auf zs binded)

scroll_mode.vim

11

Um den Cursor in der gleichen Spalte zu lassen, wenn Sie Strg + D, Ctrl + F, Ctrl + B , Ctrl + U, G, H, M, L, gg

sollten Sie die folgende Option definieren:

:set nostartofline 
+0

Ich vergesse es jedesmal: zt/zz/zb - Cursor fixieren und Bildschirm nach ** t ** op/center verschieben (deutsch: ' ** z ** entrum ')/** b ** ottom <---> H/M/L - Bildschirm fixieren und Cursor auf ** H ** igh/** M ** Idle/** L ** ow-Position bewegen – eli

4

Sie den Cursor bewegen sich mit einer Reihe Befehle Präfix kann und das wird diesen Befehl wiederholen dass viele Male

Ctrl +E wird statt einer Ctrl +E 10-mal tun.

5

Hier ist meine Lösung in vimrc:

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>zza 
nnoremap o o<ESC>zza 
nnoremap O O<ESC>zza 
nnoremap a a<ESC>zza 

Damit die Cursor in der Mitte des Bildschirms bleiben, und der Bildschirm nach oben oder unten.

+0

Ich denke, diese Lösung ist mehr, was die OP benötigt. Ich habe es angewendet und es funktioniert wie ein Zauber. –

+0

Wie wäre es, Scrolloff auf den halben Wert von 'Linien' zu setzen? –

2

zGeben Sie ein, was genau diese Frage erfordert.

Es funktioniert, wo seltsam zz nicht (vim 1689.04.07 auf Ubuntu LTS 2.016,04 ohne spezielle .vimrc) funktionieren würde