Kann der Split-Separator in vim kürzer als eine volle Spalte sein?


21

Ich benutze einen Tiling Window Manager (genial) + einen Terminal Multiplexer (tmux) + Splits innerhalb von vim. Ich habe überhaupt keine Fensterdekorationen, also gibt es überhaupt keine visuelle Trennung zwischen ihnen, wenn der Inhalt des Programms es nicht preisgibt. Ich bin mit diesem Paradigma ziemlich vertraut, da ich ohnehin mehrere Monitore und Gruppenaufgaben pro Bildschirm verwende. Wenn zwei Fenster keinen Grund hätten, nebeneinander zu stehen, wären sie gar nicht erst da.

Dies führt jedoch zu einer visuellen Dissonanz, bei der die augenscheinlichste visuelle Trennung semantisch die geringste Bedeutung hat.

  • Xorg window ‹|› window = gar nichts
  • Tmux pane ‹|› pane = 1px Trennlinie
  • Vim split ‹|› split = 1 zeichen breite farbige Spalte

Hier ist ein Beispiel, das nebeneinander Fenster, Fenster und Vim-Splits zeigt:

Fensterscheiben und Spalten

Die weiße Trennlinie, die Sie sehen, ist die am wenigsten signifikante Teilung auf dem Bildschirm, die Vim-Fenster. (Beachten Sie, dass die graue Spalte auf der rechten Seite der VIM-Sitzung eigentlich eine 80. Spalte ist und keine Unterteilung, obwohl ich oft mit dieser Größe arbeite.)

Mir ist bewusst, wie ich das im Split gezeichnete Zeichen ändern oder den Kontrast des Farbschemas verringern kann. Was ich tun möchte, ist, den gleichen geteilten Balken wie tmux zu verwenden, der keine Breite einnimmt, da er eher zwischen als in einer Spalte gezeichnet wird. Ist dies mit terminalbasiertem vim möglich? Gvim? Neovim? Kann die Trennsäule vollständig ausgeschaltet werden, wenn ein optisch unauffälliger Separator vorhanden ist?

PS Der Grund für die Verwendung eines visuell ähnlichen Trennzeichens ist, dass ich dieselben Tastenkombinationen verwende, um zwischen tmux-Fenstern und vim-Teilungen zu navigieren. Die gleichen Tasten navigieren nahtlos zwischen ihnen. Es wäre nur sinnvoll, wenn auch die visuellen Grenzen gleich wären.

Antworten:


32

Sie irren sich über tmux. Wie bei jedem Terminal-basierten Programm - einschließlich Vim - werden nur Inhalte in Zellen gezeichnet . Dies bedeutet, dass sowohl Vim als auch tmux die gleiche Methode zum Zeichnen vertikaler Ränder verwenden: Sie verwenden nur ein rohrähnliches Zeichen.

Tmux verwendet standardmäßig ( U+2502), während Vim |( U+007C) verwendet.

Wenn Sie dasselbe Trennzeichen in Vim verwenden möchten, können Sie einfach dasselbe Zeichen verwenden:

set fillchars+=vert:│

Beachten Sie, dass Ihr Farbschema wahrscheinlich die Hintergrundfarbe der vertikalen Teilung festlegt. In diesem Fall können Sie die Hintergrundfarbe direkt in Ihrem Farbschema entfernen:

hi VertSplit ctermbg=NONE guibg=NONE

Ich habe Sie zu diesem Schluss etwa eine Minute geschlagen, aber trotzdem danke. Ich bin mir nicht sicher, warum ich jemals etwas anderes angenommen habe. Ich glaube, ich hatte den Eindruck, es handele sich um eine Art Unicode-Zeichen, das Magie kombiniert, um das Trennzeichen am Rand des Zeichenbereichs zu überlagern, aber jetzt merke ich, dass ich bewusst darüber nachdenke, wie lächerlich das wäre.
Caleb

1
Es stellte sich heraus, was ich in meinem Fall brauchte, hi VertSplit cterm=NONEweil es reversestandardmäßig ist.
Lloeki

Weißt du zufällig, wie man tmux-Trennzeichen von '│' in '/' ändert? @romainl
klaus

@EnanAjmain IIRC Ich habe das tmux-Trennzeichen in seinem Quellcode gefunden. Ich glaube nicht, dass es dafür eine Option gibt, aber ich bin weit davon entfernt, ein tmux-Experte zu sein. Sie sollten das Handbuch lesen.
Romainl

@romainl Ich denke du hast recht. Alles, was ich in der Lage war, von tmux zu ändern, musste ich den Quellcode hacken.
klaus

5

Selbst in meinem eigenen Screenshot verwendet tmux keine Magie, die Aufteilung ist immer noch eine einzelne zeichenbreite Spalte. Der weniger aufdringliche visuelle Effekt ist die Verwendung eines Unicode-Zeichnungszeichens, das weniger umständlich als die ASCII-Standardeinstellung von vim ist, und das Fehlen einer hervorgehobenen Hintergrundfarbe.

In vim ist fast der gleiche Effekt möglich, wenn der rc-Datei etwa die folgenden Zeilen hinzugefügt werden:

" 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

Die Verwendung von autocmdgarantiert, dass die Hervorhebungsüberbrückung wirksam bleibt, wenn Sie die Farbschemata wechseln. Möglicherweise möchten Sie dieses Verhalten nicht, da einige Farbschemata sinnvolle Werte für diese Farbgruppe haben.

Beachten Sie auch, dass cterm=NONEeinige Farbschemata, für die dieser Wert festgelegt ist, außer reverseKraft gesetzt werden müssen, um mit den von Ihnen verwendeten fg / bg-Werten in Konflikt zu geraten.


4

Nein, dies ist in Vim nicht möglich und in GVIM wahrscheinlich nur sehr schwer zu implementieren.

Vim hält sich an die im Terminal verwendete zellenbasierte Adressierung. Innerhalb eines Puffers ist dies entscheidend für eine konsistente vertikale Navigation mit j/ k. Diese Adressierung durch zellenbasierte x- und y-Koordinaten ist in der Implementierung von Vim so tief verwurzelt, dass es sehr schwer zu überwinden ist.

Beachten Sie auch :help design-not:

  • Vim ist kein schicker GUI-Editor, der versucht, auf Kosten einer auf allen Plattformen weniger konsistenten Darstellung gut auszusehen.
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.