Как предотвратить прокрутку Vim при разбиении окна?

Я хочу остановить Vim от прокрутки (если это правильное слово), когда я разбиваю окно по горизонтали.

Скажем, я редактирую 10-строчный файл в Vim. У меня есть одно окно на буфере, а окно - на 40 строк. Там более чем достаточно места для двух окон, один поверх другого, причем оба показывают весь буфер. И пусть скажем scrolloff установлено значение 4.

Когда я разбиваю окно по горизонтали, исходное окно прокручивается так, что между верхней частью окна и строкой курсора отображаются ровно scrolloff линии - если было больше, чем scrolloff строк между верхней части окна и строки курсора - даже если нет необходимости прокручивать.

Другими словами, если курсор находится в строке 1, 2, 3, 4 или 5, когда я разбиваю окно, исходное окно не "перемещается" (хорошо). Но если курсор находится в строке 6, окно прокручивается так, что строка 2 становится самой заметной линией... обеспечение строк scrolloff (4) видимо над линией курсора (раздражает). Точно так же, если курсор находится в строке 7, когда я разбиваю окно, исходное окно прокручивается до этой строки 3, становится самой верхней видимой линией. И так далее.

Есть ли способ настроить Vim никогда не прокручивать исходное окно, когда я разделяю его по горизонтали?

Я предполагаю, что можно сопоставить <C-W>s с функцией, которая делает то, что я хочу, но я бы предпочел решить эту проблему по конфигурации, если это возможно.

Ответ 1

Я нашел решение, заимствуя ответ здесь.

В моем .vimrc у меня есть:

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

И теперь, когда я разбиваю окно по горизонтали на <C-W>s, исходное окно не прокручивается вообще.

Ответ 2

В качестве альтернативы решению Энди Стюарта здесь я использую в своем .vimrc:

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

(1) В левом верхнем углу отметьте его x и вернитесь туда, где вы были.
(2) Создайте новый раскол. Курсор переместится в это новое разделенное окно.
(3) Используйте zz, чтобы центрировать линию курсора.
(4) Вернитесь к окну, в котором вы создали раскол.
(5) Вернитесь к отметке x, а затем вернитесь туда, где вы были (для имитации шага (1))
(6) Вернитесь к расколу, который вы создали.

Одно добавление, которое я сделал, заключается в том, чтобы добавить zz к вновь открытому расколу, чтобы легче было поймать курсор в новом окне. Мой мозг может автоматически фокусироваться на центральной строке нового раскола.

Ответ 3

Недавно доступный параметр - это плагин stable-windows. Я попробовал это, и это работает хорошо.