Czy separator split w vimie może mieć szerokość mniejszą niż pełna kolumna?

21

Używam menedżera okien kafelkowych (niesamowite) + terminalnego multipleksera (tmux) + dzieli się w vimie. Nie mam żadnych dekoracji okien, więc nie ma między nimi żadnego wizualnego podziału, jeśli zawartość programu tego nie zdradza. Czuję się całkiem dobrze z tym paradygmatem, ponieważ i tak używam wielu monitorów i grupuję zadania według ekranu. Gdyby dwa okna nie miały powodu być obok siebie, nie byłoby ich w ogóle.

Stwarza to jednak pewien dysonans wizualny, w którym najbardziej oczywisty podział wizualny jest najmniej znaczący semantycznie.

  • Okno Xorg ‹|› okno = nic
  • Panel Tmux ‹|› panel = linia podziału 1px
  • Vim split ‹|› split = kolumna o szerokości 1 znaku

Oto przykład pokazujący po jednej stronie okna, panele i podziały vimów:

szyby i podziały okien

Nawet bez przechodzenia do wersji w pełnej rozdzielczości, biała linia podziału, którą widzisz, jest najmniej znaczącym podziałem na ekranie, panelami vim. (Zwróć uwagę, że szara kolumna po prawej stronie sesji vima jest w rzeczywistości podświetleniem 80. kolumny, a nie dzielnikiem, chociaż często pracuję w tym rozmiarze).

Wiem, jak zmienić postać narysowaną w podziale lub zmniejszyć kontrast schematu kolorów. Chciałbym użyć tego samego paska podziału co tmux, który nie zajmuje żadnej szerokości, ponieważ jest rysowany między kolumnami, a nie w jednej. Czy jest to możliwe w przypadku vima opartego na terminalu? Gvim? Neovim? Czy poza rozdzieleniem wizualnie dyskretnego separatora można całkowicie wyłączyć kolumnę dzielącą?

PS Powodem używania wizualnie podobnego separatora jest sens, ponieważ używam tych samych powiązań klawiszy do nawigacji między panelami tmux i podziałami vim. Te same klawisze płynnie nawigują między nimi, miałoby to sens tylko wtedy, gdy wizualne granice byłyby takie same.

Caleb
źródło

Odpowiedzi:

32

Mylisz się co do tmux. Jak każdy program oparty na terminalach - w tym Vim - rysuje tylko elementy wewnątrz komórek. Oznacza to, że zarówno Vim, jak i tmux używają tej samej metody do rysowania pionowych granic: używają po prostu znaku przypominającego fajkę.

Tmux używa ( U+2502) domyślnie, podczas gdy Vim używa |( U+007C).

Jeśli chcesz tego samego separatora w Vimie, możesz po prostu użyć tego samego znaku:

set fillchars+=vert:│

Zauważ, że twój schemat kolorów prawdopodobnie ustawia kolor tła podziału pionowego. W takim przypadku możesz usunąć kolor tła bezpośrednio w swoim schemacie kolorów:

hi VertSplit ctermbg=NONE guibg=NONE
romainl
źródło
Ja cię pokonać do tego wniosku przez około minutę, ale i tak dzięki. Nie jestem pewien, dlaczego kiedykolwiek zakładałem inaczej. Wydaje mi się, że miałem wrażenie, że robi coś w rodzaju Unicode łączącego magię, aby nałożyć separator na skraju przestrzeni postaci, ale teraz zdaję sobie sprawę, że myślę o tym świadomie, jak absurdalne byłoby to.
Caleb
1
Okazuje się, że potrzebowałem w moim przypadku, hi VertSplit cterm=NONEponieważ jest reverseto domyślnie.
Lloeki,
Czy wiesz, jak zmienić separatory tmux z „│” na, powiedzmy, „/”? @romainl
klaus
@EnanAjmain IIRC Znalazłem separator tmux w jego kodzie źródłowym. Nie sądzę, że jest na to opcja, ale daleko mi do eksperta od tmux, więc powinieneś sprawdzić instrukcję.
romainl
@romainl Myślę, że masz rację. Cokolwiek ważnego mogłem zmienić tmux, musiałem zhakować kod źródłowy.
klaus
5

Nie, nie można tego zrobić w Vimie i prawdopodobnie byłoby bardzo trudne do wdrożenia w GVIM.

Vim trzyma się adresowania komórkowego opartego na terminalu; w buforze ma to kluczowe znaczenie dla spójnej nawigacji pionowej za pomocą j/ k. To adresowanie za pomocą współrzędnych xiy opartych na komórkach jest tak głęboko zakorzenione we wdrożeniu Vima, myślę, że bardzo trudno go pokonać.

Uwaga :help design-not:

  • Vim nie jest fantazyjnym edytorem GUI, który próbuje ładnie wyglądać kosztem mniejszej spójności na wszystkich platformach.
Ingo Karkat
źródło
5

Nawet w moim zrzucie ekranu tmux nie używa żadnej magii, podział jest nadal kolumną o szerokości jednego znaku. Mniej narzucającym się efektem wizualnym jest użycie znaku rysunkowego w Unicode, który jest mniej niezgrabny niż domyślny ASCII w vimie, oraz brak wyróżnionego koloru tła.

Prawie taki sam efekt jest możliwy w vimie poprzez dodanie do pliku rc czegoś takiego jak następujące linie:

" 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

Zastosowanie autocmdgwarancji, że funkcja podświetlania podświetlenia pozostanie aktywna po zmianie schematu kolorów. Możesz lub nie chcesz tego zachowania, ponieważ niektóre schematy kolorów mają rozsądne wartości dla tej grupy kolorów.

Należy również pamiętać, że cterm=NONEkonieczne jest zastąpienie niektórych schematów kolorów, które ustawiają tę wartość reverse, ergo bałagan z dowolnymi wartościami fg / bg, których próbujesz użyć.

Caleb
źródło