Может ли разделительный разделитель в vim иметь ширину меньше полного столбца?

21

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

Однако это создает некоторый визуальный диссонанс, где наиболее очевидное разделение визуально является наименее значимым семантически.

  • Xorg window ‹|› window = вообще ничего
  • Tmux pane ‹|› pane = 1px разделительная линия
  • Vim split ‹|› split = цветной столбец шириной 1 символ

Вот пример, показывающий по одному на каждой стороне окна, панели и разделение vim:

оконные стекла и сплиты

Даже без перехода к версии с полным разрешением, белая разделительная линия, которую вы видите, является наименее значимым разделением на экране, панелями vim. (Обратите внимание, что серый столбец справа от сеанса vim на самом деле является выделением 80-го столбца, а не делителем, хотя я часто работаю с таким размером.)

Я знаю, как изменить характер, нарисованный в расколе или уменьшить контрастность цветовой схемы. То, что я хотел бы сделать, это использовать ту же панель разделения, что и tmux, которая не занимает никакой ширины, потому что она рисуется между столбцами, а не в одном. Это возможно с терминалом на основе vim? Gvim? Neovim? Опираясь на создание визуально ненавязчивого разделителя, можно ли полностью отключить разделительную колонку?

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

Калеб
источник

Ответы:

32

Вы не правы в отношении Tmux. Как и любая основанная на терминале программа, включая Vim, она рисует вещи только внутри ячеек. Это означает, что Vim и tmux используют один и тот же метод для рисования вертикальных границ: они просто используют символ, похожий на трубу.

Tmux использует ( U+2502) по умолчанию, а Vim использует |( U+007C).

Если вам нужен тот же разделитель в Vim, вы можете просто использовать тот же символ:

set fillchars+=vert:│

Обратите внимание, что ваша схема цветов, вероятно, устанавливает цвет фона вертикального разделения. Если это так, вы можете удалить фоновый цвет прямо в вашей цветовой схеме:

hi VertSplit ctermbg=NONE guibg=NONE
romainl
источник
Я прибью вас к такому выводу примерно на минуту, но все равно спасибо. Я не уверен, почему я предположил иначе. Полагаю, у меня сложилось впечатление, что он создавал какой-то символ Unicode, комбинирующий магию для наложения разделителя на краю пространства символов, но теперь я осознаю, что думаю об этом сознательно, насколько это смешно.
Калеб
1
Оказалось, что мне было нужно в моем случае, hi VertSplit cterm=NONEпотому что это по reverseумолчанию.
Lloeki
Вы случайно не знаете, как изменить разделители tmux с '│' на, скажем, '/'? @romainl
клаус
@EnanAjmain IIRC Я нашел разделитель tmux в его исходном коде. Я не думаю, что есть вариант для этого, но я далеко не эксперт по tmux, поэтому вы должны проверить руководство.
Ромен
@romainl Я думаю, ты прав. Все, что мне удалось изменить в tmux, мне пришлось взломать исходный код.
Клаус
5

Нет, это не может быть сделано в Vim, и, вероятно, будет очень трудно реализовать в GVIM.

Vim придерживается адресации на основе ячеек, используемой в терминале; внутри буфера это важно для последовательной вертикальной навигации с помощью j/ k. Эта адресация по координатам x и y на основе ячеек настолько укоренилась в реализации Vim, что, мне кажется, ее очень трудно преодолеть.

Также обратите внимание :help design-not:

  • Vim не является необычным редактором графического интерфейса, который пытается выглядеть красиво за счет того, что он менее согласован на всех платформах.
Инго Каркат
источник
5

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

Почти такой же эффект возможен в 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, которые вы пытаетесь использовать.

Калеб
источник