2012-10-15 16 views
8

Chcę zatrzymać Vima od przewijania (jeśli to właściwe słowo), kiedy podzielę okno poziomo.Jak zapobiec przewijaniu Vima podczas dzielenia okna?

Załóżmy, że edytuję plik 10-wierszowy w Vimie. Mam jedno okno na bufor, a okno ma 40 linii. Jest wystarczająco dużo miejsca na dwa okna, jeden na drugim, z których oba pokazują cały bufor. Powiedzmy, że scrolloff jest ustawione na 4.

Kiedy podzielę okno na poziomo, oryginalne okno przewinie się tak, że dokładnie między wierszami okna a wierszem, w którym znajduje się kursor, znajdują się dokładnie linie scrolloff więcej niż scrolloff linii między górną częścią okna a linią kursora - nawet jeśli nie ma potrzeby przewijania.

Innymi słowy, jeśli kursor znajduje się na linii 1, 2, 3, 4 lub 5, kiedy podzielę okno, oryginalne okno nie "przesuwa się" (dobrze). Ale jeśli kursor znajduje się w wierszu 6, okno przewija się tak, że linia 2 staje się najbardziej widoczną linią ... zapewniając, że linie (4) są widoczne powyżej linii kursora (denerwujące). Podobnie, jeśli kursor znajduje się w linii 7, kiedy podzielę okno, pierwotne okno przewinięte do tej linii 3 staje się najbardziej widoczną linią. I tak dalej.

Czy istnieje sposób, aby skonfigurować Vima, aby nigdy nie przewijał oryginalnego okna, kiedy podzielę go poziomo?

Wyobrażam sobie, że można mapować <C-W>s na funkcję, która robi to, co chcę, ale wolałbym rozwiązać to przez konfigurację, jeśli to możliwe.

+0

Czy nie jest to bezpośredni efekt przewijania? – romainl

+0

Zdarza się to, nawet gdy 'scrolloff' ma wartość 0 (tj. Nigdy nie zostało ustawione). Również 'scrolloff' ma być minimalną liczbą linii utrzymywanych powyżej/poniżej kursora, a nie dokładną liczbą. –

+0

Można "ustawić przesunięcie = 999", które jest często używane do utrzymania bieżącego wiersza w środku okna. Wydaje się, że rozwiązuje to twój problem, ale może być bardzo denerwujące. – romainl

Odpowiedz

5

Znalazłem rozwiązanie, pożyczając odpowiedź od here.

W moim .vimrc mam:

nnoremap <C-W>s Hmx`` \|:split<CR>`xzt`` 

A teraz, kiedy podzielić okno poziomo <C-W>s, oryginalne okno nie przewiń w ogóle.

+0

To jest rozwiązanie, na które się zdecydowałem, ale gdy używam ': wincmd s', które mam do zrobienia na moim Chromebooku, ponieważ' 'spróbuje zamknąć okno, wciąż dostaję denerwującą zmianę. Ponadto, jeśli to zadziała, z '', ekran będzie migał, podczas gdy starsza konfiguracja vima działała dobrze. Myślę, że jest gdzieś trudno znaleźć lub nieudokumentowane ustawienie, które może to naprawić, chyba że jest to uzasadniony błąd vima. – redbmk

2

Jako alternatywę dla rozwiązania Andy Stewart „s Oto co mogę użyć w moim .vimrc:

     (3)   (5) 
         ++   +--+ 
         ||   | | 
nnoremap _ Hmx``<C-w>szz<C-w><C-p>`x``<C-w><C-p> 
      | || | |  | |  | 
      +-+-++----+ +--------+ +--------+ 
      (1) (2)  (4)   (6) 

(1) Idź lewy górny zapisać oznaczyć go x i wrócić do miejsca, gdzie byłaś.
(2) Utwórz nowy podział. Kursor przejdzie do nowego podzielonego okna.
(3) Użyj środka zz, aby wyśrodkować kursor.
(4) Wróć do okna, w którym utworzyłeś podział.
(5) Wróć do znaku x, a następnie wróć do miejsca, w którym byłeś (aby zasymulować krok (1))
(6) Wróć do utworzonego podziału.

Jednym z dodanych przeze mnie jest dodanie zz do nowo otwartego podziału, aby łatwiej było przechwycić kursor na nowym oknie. Mój mózg może automatycznie skupić się na środkowym rzędzie nowego podziału.

Powiązane problemy