Ответ 1
Я нашел решение, заимствуя ответ здесь.
В моем .vimrc
у меня есть:
nnoremap <C-W>s Hmx`` \|:split<CR>`xzt``
И теперь, когда я разбиваю окно по горизонтали на <C-W>s
, исходное окно не прокручивается вообще.
Я хочу остановить Vim от прокрутки (если это правильное слово), когда я разбиваю окно по горизонтали.
Скажем, я редактирую 10-строчный файл в Vim. У меня есть одно окно на буфере, а окно - на 40 строк. Там более чем достаточно места для двух окон, один поверх другого, причем оба показывают весь буфер. И пусть скажем scrolloff
установлено значение 4.
Когда я разбиваю окно по горизонтали, исходное окно прокручивается так, что между верхней частью окна и строкой курсора отображаются ровно scrolloff
линии - если было больше, чем scrolloff
строк между верхней части окна и строки курсора - даже если нет необходимости прокручивать.
Другими словами, если курсор находится в строке 1, 2, 3, 4 или 5, когда я разбиваю окно, исходное окно не "перемещается" (хорошо). Но если курсор находится в строке 6, окно прокручивается так, что строка 2 становится самой заметной линией... обеспечение строк scrolloff
(4) видимо над линией курсора (раздражает). Точно так же, если курсор находится в строке 7, когда я разбиваю окно, исходное окно прокручивается до этой строки 3, становится самой верхней видимой линией. И так далее.
Есть ли способ настроить Vim никогда не прокручивать исходное окно, когда я разделяю его по горизонтали?
Я предполагаю, что можно сопоставить <C-W>s
с функцией, которая делает то, что я хочу, но я бы предпочел решить эту проблему по конфигурации, если это возможно.
Я нашел решение, заимствуя ответ здесь.
В моем .vimrc
у меня есть:
nnoremap <C-W>s Hmx`` \|:split<CR>`xzt``
И теперь, когда я разбиваю окно по горизонтали на <C-W>s
, исходное окно не прокручивается вообще.
В качестве альтернативы решению Энди Стюарта здесь я использую в своем .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
к вновь открытому расколу, чтобы легче было поймать курсор в новом окне. Мой мозг может автоматически фокусироваться на центральной строке нового раскола.
Недавно доступный параметр - это плагин stable-windows. Я попробовал это, и это работает хорошо.