У меня есть несколько скрытых символов в буфере, и горизонтальная прокрутка убивает выравнивание.
Есть ли способ как это отключить? Я не мог найти соответствующие варианты.
Изменить: демо добавлено. Вы можете видеть, что vim основывает смещение прокрутки на незакрытой части файла, следовательно, разрыв строки.
:set wrap
<c-s>
для приостановки терминала, чтобы экран не обновлялся. Затем вы можете вслепую вносить изменения и возвращаться к началу строки и нажимать,<c-q>
чтобы продолжить. Другие, возможно, бесполезные варианты: убедитесь, что одинаковое количество скрытых символов находится между каждым видимым символом, или расширьте окно.Ответы:
Как отключить горизонтальную прокрутку
Я написал решение, которое отключает горизонтальную прокрутку (с помощью предложения @ ЯрославРахматуллина ), но я не думаю, что оно вам понравится:
Это предотвращает прокрутку вправо с помощью невероятно точного метода повторной прокрутки назад. *
* Поскольку я не знаю, как далеко вы прокручивали вправо или какова длина ваших строк, я прокручиваю произвольно «далекую» величину 99 половин ширины экрана. Обратите внимание, что я не беспокоюсь о том, прокручивали ли вы вправо или нет, а затем прокручивали «назад» влево. Если вы на самом деле собираетесь использовать это решение , которое вы можете постучать что - то путем сравнения значений
getcurpos()
,'sidescroll'
и'columns'
.Почему вы не хотите этого делать
Причина, по которой вы не собираетесь использовать это, заключается в том, что в основе проблемы прокрутки лежит еще одна проблема: Vim не позволит вам переместить курсор «за пределы экрана». Поэтому, если вы прокрутите влево таким образом, что после прокрутки курсор будет за пределами экрана, Vim услужливо подведет курсор вместе с ним и переместит его влево.
Но поскольку вычисление, используемое для определения того, находится ли курсор на экране, такое же, как и при решении вопроса о необходимости прокрутки исходной задачи, общий эффект заключается в том, что с этим «решением» на месте, если вы попытаетесь переместить курсор вправо в ситуации, которая обычно вызывает боковую прокрутку, теперь курсор вообще отказывается двигаться. **
** Чтобы быть немного более точным, в зависимости от текущей позиции и движения, курсор может двигаться вправо; он просто не пройдет мимо позиции, в которой обычно происходит прокрутка.
Другие опции?
Поэтому я боюсь, что ваш запланированный обходной путь не удастся. Если вы хотите работоспособное решение общей проблемы, его нужно будет реализовать в исходном коде Vim.
Как вы уже заметили , вряд ли это произойдет в ближайшее время, поэтому я боюсь, что лучшим вариантом для обхода конкретного экземпляра проблемы, показанного в вашем gif, является обращение к автору плагина с просьбой прекратить использование
conceal
полностью и вместо этого удалить скрытый текст из буфера полностью.Исходя из незакрытого вывода и упоминания
vim-plugin-AnsiEsc
в документации, это может быть чем-то возможным для них реализовать, но трудно сказать наверняка, не зная, как функционирует плагин.источник
Если у вас есть способ отредактировать файл, вы можете обернуть настройки цветов с помощью
\[
и\]
, как описано здесь :В противном случае все цветовые коды считаются символами и, следовательно, могут учитываться для горизонтальной прокрутки.
Я не уверен, что это проблема, но видя источник календаря (с
syntax off
) и текущее поведение, это заставило меня задуматься об этом.источник
conceal
функцией (см. Обсуждение в комментариях).РЕДАКТИРОВАТЬ: Это известная ошибка, закрыт "не будет исправлено": https://github.com/vim/vim/issues/260
Оригинальный ответ:
Мой vim не прокручивается по горизонтали, пока курсор не коснется края экрана.
Вы используете
sidescrolloff
?Я не знаю о том, чтобы полностью отключить горизонтальную прокрутку, но этот параметр должен подождать, пока курсор не исчезнет с края:
источник
'sidescrolloff=0'
потому , что Vim считает , что курсор уже ушел от края: он основывает свои расчеты на нескрываемым текст, не видимый текст.