Как отключить горизонтальную прокрутку?

37

У меня есть несколько скрытых символов в буфере, и горизонтальная прокрутка убивает выравнивание.

Есть ли способ как это отключить? Я не мог найти соответствующие варианты.

плохая демонстрация горизонтальной прокрутки

Изменить: демо добавлено. Вы можете видеть, что vim основывает смещение прокрутки на незакрытой части файла, следовательно, разрыв строки.

Enuy
источник
6
Вы не можете отключить его, но вы можете:set wrap
EvergreenTree
8
@ Ладно, я имею в виду, что строки на самом деле длиннее ширины окна, но некоторый текст (коды цвета, похожие на bash) скрыты. Итак, Вим думает, что он уже достиг края окна, но визуально это не так. Я бы сказал, что это квалифицируется как ошибка.
Tommcdo
8
@ tommcdo Да, я понимаю, что вы имеете в виду. Существует похожая проблема с переносом строк, когда только скрытые части в конце строки являются причиной переноса, и он получил WONTFIX от Брэма: code.google.com/p/vim/issues/detail?id=260
Enuy
3
Вот почему я ищу альтернативное решение - вообще отключить горизонтальную прокрутку.
Enuy
3
Самое близкое, о чем я могу подумать, это то, что если вы находитесь в терминале, вы можете использовать его <c-s>для приостановки терминала, чтобы экран не обновлялся. Затем вы можете вслепую вносить изменения и возвращаться к началу строки и нажимать, <c-q>чтобы продолжить. Другие, возможно, бесполезные варианты: убедитесь, что одинаковое количество скрытых символов находится между каждым видимым символом, или расширьте окно.
Мэтт Бём

Ответы:

2

Как отключить горизонтальную прокрутку

Я написал решение, которое отключает горизонтальную прокрутку (с помощью предложения @ ЯрославРахматуллина ), но я не думаю, что оно вам понравится:

augroup NoScrollPlease
  autocmd!
  autocmd CursorMoved * norm!99zH
augroup END

Это предотвращает прокрутку вправо с помощью невероятно точного метода повторной прокрутки назад. *

* Поскольку я не знаю, как далеко вы прокручивали вправо или какова длина ваших строк, я прокручиваю произвольно «далекую» величину 99 половин ширины экрана. Обратите внимание, что я не беспокоюсь о том, прокручивали ли вы вправо или нет, а затем прокручивали «назад» влево. Если вы на самом деле собираетесь использовать это решение , которое вы можете постучать что - то путем сравнения значений getcurpos(), 'sidescroll'и 'columns'.

Почему вы не хотите этого делать

Причина, по которой вы не собираетесь использовать это, заключается в том, что в основе проблемы прокрутки лежит еще одна проблема: Vim не позволит вам переместить курсор «за пределы экрана». Поэтому, если вы прокрутите влево таким образом, что после прокрутки курсор будет за пределами экрана, Vim услужливо подведет курсор вместе с ним и переместит его влево.

Но поскольку вычисление, используемое для определения того, находится ли курсор на экране, такое же, как и при решении вопроса о необходимости прокрутки исходной задачи, общий эффект заключается в том, что с этим «решением» на месте, если вы попытаетесь переместить курсор вправо в ситуации, которая обычно вызывает боковую прокрутку, теперь курсор вообще отказывается двигаться. **

** Чтобы быть немного более точным, в зависимости от текущей позиции и движения, курсор может двигаться вправо; он просто не пройдет мимо позиции, в которой обычно происходит прокрутка.

Другие опции?

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

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

Исходя из незакрытого вывода и упоминания vim-plugin-AnsiEscв документации, это может быть чем-то возможным для них реализовать, но трудно сказать наверняка, не зная, как функционирует плагин.

Rich
источник
0

Если у вас есть способ отредактировать файл, вы можете обернуть настройки цветов с помощью \[и \], как описано здесь :

[...] То, что было сделано, - это заключить '\ 033 [1; 33m' ', который начинается с желтого цвета в' ['и'] ', что говорит оболочке "все, что находится между этими экранированными квадратными скобками, включая сами скобки, это непечатный символ [...]

В противном случае все цветовые коды считаются символами и, следовательно, могут учитываться для горизонтальной прокрутки.

Я не уверен, что это проблема, но видя источник календаря (с syntax off) и текущее поведение, это заставило меня задуматься об этом.

padawin
источник
Проблема не в цветах, а в символах, скрытых concealфункцией (см. Обсуждение в комментариях).
Богатое
Да, я понимаю. Может быть, есть что-то, что я не очень хорошо понял, но у меня была похожая проблема в bash с PS1, использующим цветные символы (тот факт, что они являются цветами, не имеет значения), и терминал не возвращался правильно в новой строке при хорошем поместите, поскольку это считало символы для цветов как эффективные символы, тогда как они должны были быть проигнорированы, поскольку они невидимы. Анимация напомнила мне об этой проблеме (где горизонтальное разбиение на страницы выполняется «слишком рано», как будто это происходит в зависимости от количества символов в строке, что и упоминается в ссылке в моем ответе).
падавин
Две проблемы похожи, я согласен. Но поведение, описанное в этом вопросе, происходит из-за того, как Vim считает символы (не терминал), и поэтому, боюсь, предложение, которое вы сделаете в первом абзаце, здесь не поможет.
Богатое
0

РЕДАКТИРОВАТЬ: Это известная ошибка, закрыт "не будет исправлено": https://github.com/vim/vim/issues/260

Оригинальный ответ:

Мой vim не прокручивается по горизонтали, пока курсор не коснется края экрана.

Вы используете sidescrolloff?

Я не знаю о том, чтобы полностью отключить горизонтальную прокрутку, но этот параметр должен подождать, пока курсор не исчезнет с края:

:set sidescrolloff=0
JasonWoof
источник
Проблема существует даже 'sidescrolloff=0'потому , что Vim считает , что курсор уже ушел от края: он основывает свои расчеты на нескрываемым текст, не видимый текст.
Богатое
О, это действительно глючит. Я нашел сообщение об ошибке и добавил его в свой ответ. Сопровождающий vim не хочет это исправлять.
JasonWoof
Не исправление этой ошибки ... но, возможно, вы могли бы реализовать раскраску календаря с простым текстом в буфере и prop_type_add () и prop_add () для цвета / и т.д.
JasonWoof
Да, это облом, но это сообщение об ошибке - причина, по которой ОП написал этот вопрос в поисках обходного пути !
Богатое