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 .vimrc
Mapping, 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 vim
dem 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), :vs
wird der neue Puffer nach einer (vertikalen Aufteilung) nach unten oder bis zu dem Punkt verschoben, an dem er am besten denkt.
Das .vimrc
Mapping 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