Чи може роздільник розділення в vim бути меншим, ніж повний стовпчик у ширину?


21

Я використовую диспетчер віконних плиток (дивним) + термінальний мультиплексор (tmux) + розщеплення всередині vim. У мене немає віконних прикрас, тож у вас взагалі немає візуального розколу між ними, якщо вміст програми цього не дає. Мені цілком подобається ця парадигма, оскільки я в будь-якому разі використовую кілька моніторів і групові завдання за екраном. Якби у двох вікон не було причин бути поруч, вони б там не були в першу чергу.

Однак це створює трохи візуального дисонансу, коли найбільш очевидний розкол візуально є найменш значущим семантично.

  • Xorg вікно ‹|› вікно = взагалі нічого
  • Панель Tmux ‹|› панель = 1px лінія дільника
  • Vim split ‹|› split = широкий кольоровий стовпчик з 1 символом

Ось зразок, який показує один на одного бічні вікна, вітрини та панелі vim:

вікна та розбивки

Навіть не переходячи до версії з повною роздільною здатністю, білий роздільник, який ви бачите, є найменш значущим розколом на екрані, панелях vim. (Зауважте, сірий стовпчик праворуч від сеансу vim - це насправді підсвітка 80-го стовпця, а не подільник будь-якого виду, хоча я часто працюю в такому розмірі.)

Мені відомо, як змінити символ, намальований в розбитті, або зменшити контраст кольорової гами. Що я хотів би зробити, це використовувати той самий розділений рядок, що і tmux, який не займає ніякої ширини, оскільки він намальований між стовпцями, а не в одному. Чи можливо це за допомогою термінала на основі vim? Гвім? Неовім? Якщо забороняється робити візуально ненав'язливий роздільник, чи можна розділити стовпчик повністю?

PS Причина використання візуально подібного роздільника має сенс у тому, що я використовую ті самі прив'язки клавіш для навігації між панелями tmux та vim-розбиттями. Одні і ті ж клавіші безперешкодно пересуваються між собою, це мало б сенс лише в тому випадку, якщо візуальні межі були однаковими.

Відповіді:


32

Ви неправі про tmux. Як і будь-яка програма, що базується на терміналах, включаючи Vim, вона лише малює речі всередині комірок. Це означає, що Vim і tmux обидва використовують один і той же метод для малювання вертикальних меж: вони просто використовують символ, що нагадує трубу.

Tmux використовує ( U+2502) за замовчуванням, тоді як Vim використовує |( U+007C).

Якщо ви хочете той самий роздільник у Vim, ви можете просто використовувати той самий символ:

set fillchars+=vert:│

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

hi VertSplit ctermbg=NONE guibg=NONE

Я побив вас до цього висновку хвилин на хвилину, але все одно дякую. Я не впевнений, чому я коли-небудь припускав інакше. Напевно, у мене було враження, що він робить якийсь персонаж Unicode, поєднуючи магію, щоб накласти роздільник на край простору символів, але зараз я усвідомлюю, що свідомо думаю про це, як смішно це буде.
Калеб

1
Виявляється, що мені було потрібно в моєму випадку, hi VertSplit cterm=NONEтому що це reverseяк дефолт.
Lloeki

Чи випадково ви знаєте, як змінити розділювачі tmux з '│' на, скажімо, '/'? @romainl
klaus

@EnanAjmain IIRC Я знайшов роздільник tmux у його вихідному коді. Я не думаю, що для цього є варіант, але я далеко не експерт із tmux, тому слід перевірити посібник.
romainl

@romainl Я думаю, ти маєш рацію. Все, що мені вдалося змінити tmux, мені довелося зламати вихідний код.
klaus

5

Ні, цього не можна зробити у Vim, і, ймовірно, це буде дуже важко реалізувати в GVIM.

Vim дотримується адресації на основі комірок, яка використовується в терміналі; У буфері це важливо для послідовної вертикальної навігації з j/ k. Це звернення за допомогою координат x та y на основі комірок настільки вбудовано у реалізацію Vim, я думаю, що це дуже важко подолати.

Також зверніть увагу :help design-not:

  • Vim - це не вишуканий редактор графічного інтерфейсу, який намагається виглядати приємно ціною бути менш послідовною на всіх платформах.

5

Навіть у моєму власному екрані, tmux не використовує ніякої магії, розкол - це все-таки одна колонка з широкими символами. Менш нав'язливим візуальним ефектом є використання символу малювання коробки Unicode, який є менш незграбним, ніж ASCII за замовчуванням Vim, та відсутність кольору фону підсвічування.

Майже такий же ефект можливий у vim, додавши щось подібне до наступних рядків у файл rc:

" Set split separator to Unicode box drawing character
set encoding=utf8
set fillchars=vert:│

" Override color scheme to make split the same color as tmux's default
autocmd ColorScheme * highlight VertSplit cterm=NONE ctermfg=Green ctermbg=NONE

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

Також зауважте, що cterm=NONEнеобхідно переоцінювати деякі кольорові схеми, які встановлюють це значення reverse, ерго возитися з будь-якими значеннями fg / bg ви намагаєтесь використовувати.

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