Вихревые движения буфера в окне


11

При использовании :set wrapв vi / vim содержимое всей перенесенной строки помещается в буфер отображения при перемещении курсора в новую строку, даже при навигации по файлу по отображаемой строке (gj / gk), а не по реальной строке (j / к). Например, если строка обернута над 5 строками экрана и в данный момент находится за пределами буфера дисплея, буфер перейдет на 5 строк при переходе в эту строку, чтобы заставить всю строку поместиться на экране. Есть ли способ отключить это поведение? Обратите внимание, что set display+=lastlineэто позволит отображать частичные строки, когда обернутая строка вытесняется с экрана путем перемещения от линии, но это не разрешает скачки буфера, возникающие при переходе к строке, которая изначально находилась вне буфера.

Пояснение: если приведенное выше описание является туманным, суть в том, что я хотел бы иметь возможность плавной прокрутки в vim с включенным переносом строк, так что строки будут частично отображаться за пределами экрана, а не обязательно отображаться полностью.


1
Не могли бы вы подтвердить, что вы имеете в виду: вы хотите, чтобы часть обернутой части строки не отображалась и имела возможность плавной прокрутки? 'wrap'Боюсь, Vim показывает линии полностью, когда включен
Benoit

Точно. Я так понимаю, нет способа переопределить это поведение, отображая обернутые строки во время прокрутки? Спасибо.
user001

1
Не то чтобы я знал. Ждите ответов, но никто не знает, что может сделать Vim.
Бенуа

1
согласен с @Benoit. Насколько я знаю, это невозможно.
Фредрик Пихл

1
В настоящее время в списке рассылки vim_dev обсуждается эта тема. Похоже, вы не единственный с этим запросом.
Рэнди Моррис

Ответы:


1

Не полный ответ, но, возможно, привести. Там scrollвариант. Справка для этой опции гласит, среди прочего:

{Vi немного отличается: 'scroll' дает количество строк экрана вместо строк файла, имеет значение при переносе строк}


Спасибо, это полезно. Комбинации клавиш <Ctrl-E> (вниз) и <Ctrl-Y> (вверх) дают базовое поведение, которое я хочу. Если есть способ определить, находится ли курсор в верхней или нижней строке окна, тогда временное решение будет включать условное отображение клавиш со стрелками вверх и вниз на <Ctrl-Y> gk и <Ctrl-E> gj, соответственно. Когда курсор находится не в верхней или нижней строке окна, необходимо сопоставить их с gk и gj (оператор else в условном выражении). Есть ли простой способ определить, находится ли курсор в верхней или нижней строке текущего окна?
user001

0

в обычном режиме вы можете перемещаться между отображаемыми частями обернутой строки, используя gkи gj( g<up>или g<down>). В этой вики-странице vim объясняется, как навсегда изменить поведение.


1
Конечно, и я сопоставил это поведение с клавишами со стрелками. Однако это отличается от обязательного отображения всей обернутой строки при переходе к этой строке. Это поведение не зависит от использования gj / gk или j / k. Я хотел бы иметь возможность частично перейти к строке, которая изначально находится вне буфера (вне экрана) без отображения всей перенесенной строки.
user001

ОК, тогда я не понял. Ну, я думаю, что ваша строка либо завернута, либо нет. То, что вы хотели бы, это что-то среднее, но я думаю, что это просто невозможно.
jpjacobs
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.