Як відключити горизонтальну прокрутку?


37

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

Чи є спосіб, як її відключити? Я не зміг знайти жодних відповідних варіантів.

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

Редагувати: демонстрація додана. Ви можете бачити зміщення прокрутки баз vim на неприхованій частині файлу, тому фрагмент розривається.


6
Ви не можете його відключити, але ви можете:set wrap
EvergreenTree

8
@ Що, я маю на увазі те, що рядки насправді довші за ширину вікна, але деякі тексти (кольори кольорів, що нагадують баш) приховані. Отже, Вім вважає, що це вже досяг краю вікна, але візуально це не так. Я б сказав, що це кваліфікується як помилка.
tommcdo

8
@tommcdo Так, я розумію, що ти маєш на увазі. Існує аналогічна проблема із лініями обгортання, коли лише приховані частини в кінці рядка є причиною обгортання, і це отримало WONTFIX від Bram: code.google.com/p/vim/isissue/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в документації, це може бути те, що вони можуть реалізувати, але важко сказати точно, не знаючи, як плагін функціонує.


0

Якщо у вас є спосіб редагувати файл, ви можете обернути налаштування кольорів \[і \], як описано тут :

[...] Що було зроблено, це вкласти '\ 033 [1; 33m', який починає жовтий колір у '[' і ']', який повідомляє оболонці "все між цими квадратними дужками, що вийшли, включаючи самі дужки, є недрукарським символом [...]

В іншому випадку цілі коди кольорів вважаються символами, тому їх можна враховувати за горизонтальну прокрутку.

Я не впевнений, що це проблема, але побачивши джерело календаря (з syntax off) та поточну поведінку, це змусило мене задуматися про це.


Проблема - не кольори, а замість них символи, приховані concealфункцією (див. Обговорення в коментарях).
Багатий

Так я зрозумів. Можливо, є щось, що я не сприйняв добре, але у мене була схожа проблема в башті з PS1, використовуючи кольорові символи (те, що вони є кольорами, не має значення), і термінал неправильно повертався в новій лінії на хорошому місце, як це вважало символи для кольорів як ефективні символи, тоді як їх треба було ігнорувати, оскільки вони невидимі. Анімація нагадала мені це питання (де горизонтальне розбиття сторінки робиться «занадто рано», як ніби це робиться на основі кількості символів у рядку, про що йдеться у посиланні у моїй відповіді).
padawin

Дві проблеми схожі, я згоден. Але поведінка, описана в цьому питанні, виникає через те, як Vim рахує символи (а не термінал), і тому пропозиція, яку ви робите в своєму першому абзаці, тут не допоможе, я боюся.
Багатий

0

EDIT: Це відома помилка, закрита "не виправиться": https://github.com/vim/vim/isissue/260

Оригінальна відповідь:

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

Ви використовуєте sidescrolloff?

Я не знаю про відключення горизонтальної прокрутки повністю, але цей параметр повинен змусити її зачекати, поки курсор не піде з краю:

:set sidescrolloff=0

Проблема існує навіть 'sidescrolloff=0'тому , що Vim вважає , що курсор вже пішов від краю: він засновує свої розрахунки на неприхованим текст, невидимий текст.
Багатий

О, це справді баггі. Я знайшов повідомлення про помилку з цього приводу і додав його до своєї відповіді. Підтримувач vim не хоче це виправляти.
JasonWoof

Не виправлення цієї помилки ... але, можливо, ви могли реалізувати забарвлення свого календаря звичайним текстом у буфері та prop_type_add () та prop_add () для кольорів / тощо.
JasonWoof

Так, це непросто, але цей звіт про помилку є причиною, коли ОП написало це питання, шукаючи вирішення !
Багатий
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.