Wie kann vim die Cursorposition beibehalten, wenn ein Split geöffnet wird?

1322
cmhobbs

Wenn ich einen vertikalen Spalt in vim öffne, wird meine aktuelle Zeile an den oberen Rand des Puffers angehoben (die gesamte Datei wird nach oben gerollt). Wie kann ich vim dazu bringen, seine aktuelle Position beizubehalten?

2
Welchen Befehl oder welche Taste verwenden Sie genau? Ich frage mich, weil sowohl die Taste "Ctrl-WV" als auch ": vsplit" den Cursor für mich nicht bewegen. xaizek vor 11 Jahren 0
Hast du dein _vimrc auf irgendeine Weise verändert? EBGreen vor 11 Jahren 0
Hier ist mein vimrc: https://gist.github.com/1bf9c5228c74cbb2ed1d Ich verwende ctl + w, v, um die Aufteilung zu öffnen, aber: vsplit zeigt dieses Verhalten ebenfalls. cmhobbs vor 11 Jahren 0
Ich habe wahrscheinlich nichts in Ihrer .vimrc gesehen. Es ist wahrscheinlich eines Ihrer Plugins. Sie könnten versuchen, vim als `vim -N -u NONE` zu starten und zu sehen, ob das Problem behoben ist. Da `: vsplit` auch das Problem verursacht, handelt es sich wahrscheinlich eher um einen automatischen Befehl als um ein Mapping. Sie könnten versuchen: au! filetypedetect` (um diese Gruppe loszuwerden und den Rest leichter zu erkennen), gefolgt von ": au", um alle Autocommands aufzulisten und zu sehen, ob irgendwelche verdächtig aussehen. garyjohn vor 11 Jahren 0
Es zeigt das gleiche Verhalten beim Ausführen von vim -N -u NONE. Das einzige Plugin, das ich habe, ist die Bufferlist. Ich ging so weit, es ohne Erfolg zu entfernen. Beachten Sie, dass dies sowohl unter Debian als auch unter OSX 10.8 auftritt. cmhobbs vor 11 Jahren 0

2 Antworten auf die Frage

1
Markus Orreilly

BEARBEITEN: REAL ANSWER : siehe https://stackoverflow.com/questions/9625028/vim-buffer-position-change-on-window-split-annoyance

TLDR : Dieses Verhalten tritt nur beim ersten Erstellen eines neuen Fensters auf. Wenn Sie das Fenster schließen und erneut ausführen, ist der Cursor im neuen Puffer derselbe wie im alten Puffer. Die Antwort darauf war, etwas Unnützes zu tun, das sich öffnet, dann ein Fenster schließt und dann Ihre vertikale Teilung durchführt.

Hier ist ein weiteres .vimrcMapping, das die Antwort von stackoverflow umschließt, um das für Sie zu tun:

map <C-S-O> :tabnew<CR>bwipeout<CR>:vs<CR> 

Wenn Sie also drücken ctrl-shift-o, öffnet sich eine neue leere Registerkarte ( :tabnew<CR>), löschen Sie den Puffer ( :bwipeout<CR>) und führen Sie dann die vertikale Aufteilung durch ( :vs<CR>).

Hoffe das ist besser - funktioniert perfekt für mich. Danke, dass Sie mich dazu bringen wollen, etwas Nutzbares zu finden, um dieses nervige Verhalten zu umgehen!


Das passiert mir immer wieder! Ich habe kürzlich eine Antwort gefunden, die meistens funktioniert (besser als nichts). Fügen Sie dies in Ihre ein .vimrc:

map <C-S-O> mmH:vs<CR>`m<C-W>l`m<C-W>h 

Jedes Mal, wenn Sie drücken ctrl+shift+o, sollte es vertikal geteilt werden, und der Cursor sollte sich in derselben Zeile und Spalte befinden, in der sich der Cursor im ursprünglichen Puffer befunden hatte, bevor Sie ihn teilen.

Das Verhalten, bei vimdem versucht wird, umzugehen, ist, wenn der Puffer, den Sie bearbeiten, größer ist als momentan angezeigt werden kann. Je nachdem, wo sich der Cursor im Puffer befindet (genau in der Mitte, in der oberen Hälfte, in der unteren Hälfte), :vswird der neue Puffer nach einer (vertikalen Aufteilung) nach unten oder bis zu dem Punkt verschoben, an dem er am besten denkt.

Das .vimrcMapping oben macht:

map <C-S-O> map ctrl-shift-o to run this  mm mark the current cursor position  H move the cursor to the top of the buffer  :vs<CR> do a vertical split  `m move to line and column of mark  <C-W>l move focus to the right to the original buffer  `m move the cursor in the orig buffer back to the marked position  <C-W>h move back to the new buffer on the left 

Wieder funktioniert es die meiste Zeit für mich, nicht sicher, warum es nicht immer funktioniert. Wie auch immer, hoffe das hat einigen geholfen

Tatsächlich hat 'splitright' aus den Kommentaren in dem angenommenen Beitrag, den Sie verlinkt haben, das Problem gelöst, der gesamte Thread war jedoch sehr aufschlussreich. Akzeptieren, weil die verknüpfte Lösung mein Problem gelöst hat. cmhobbs vor 11 Jahren 0
0
Conner

This might be happening because you have long lines that are getting bunched up by the vertical split. If you :set nowrap and then :vsp you'll notice that it doesn't happen.

Die Einstellung von nowrap hat scheinbar keinerlei Auswirkungen darauf. Selbst wenn ich einen Puffer mit Zeilen habe, die kurz genug sind, um nicht mit dem Split zu umgehen, springt mein Cursor immer noch an den oberen Rand des Bildschirms. cmhobbs vor 11 Jahren 0
Hm, ich kann das nicht reproduzieren. Welche Version von Vim ist das? Conner vor 11 Jahren 0
VIM - Vi IMproved 7.2 (2008 Aug 9, erstellt am 5. April 2012 um 10:17:30 Uhr) Mitgelieferte Patches: 1-411 cmhobbs vor 11 Jahren 0