Il separatore diviso in vim può essere largo meno di un'intera colonna?


21

Uso un window manager per la piastrellatura (fantastico) + un multiplexer terminale (tmux) + si divide all'interno di vim. Non ho decorazioni per finestre, quindi non c'è alcuna divisione visiva tra loro se il contenuto del programma non lo dà via. Mi sento abbastanza a mio agio con questo paradigma in quanto utilizzo comunque più monitor e attività di gruppo per schermo. Se due finestre non avessero un motivo per stare fianco a fianco, non sarebbero in primo luogo lì.

Tuttavia, questo crea un po 'di dissonanza visiva in cui la divisione più evidente visivamente è la meno significativa semanticamente.

  • Xorg window ‹|› window = niente affatto
  • Tmux riquadro ‹|› riquadro = linea divisoria 1px
  • Vim split ‹|› split = colonna colorata larga 1 carattere

Ecco un esempio che mostra uno a fianco di finestre, riquadri e divisioni vim:

vetri di Windows e si divide

Anche senza fare clic per passare alla versione a piena risoluzione, la linea di divisione bianca che vedi è la divisione meno significativa sullo schermo, i pannelli vim. (Nota che la colonna grigia a destra della sessione vim è in realtà un momento saliente della colonna 80, non un divisore di alcun tipo, anche se lavoro spesso a quella dimensione.)

Sono a conoscenza di come modificare il carattere disegnato nella divisione o ridurre il contrasto della combinazione di colori. Quello che vorrei fare è usare la stessa barra divisa di tmux che non occupa alcuna larghezza perché è disegnata tra le colonne anziché in una. Questo è possibile con vim basato su terminale? Gvim? Neovim? Se si crea un separatore visivamente discreto, è possibile disattivare completamente la colonna divisoria?

PS La ragione per cui ha senso utilizzare un separatore visivamente simile è perché uso gli stessi tasti di scelta rapida per navigare tra i riquadri tmux e le divisioni vim. Gli stessi tasti navigano senza soluzione di continuità tra loro, avrebbe senso solo se anche i confini visivi fossero gli stessi.

Risposte:


32

Ti sbagli su tmux. Come ogni programma basato su terminali - incluso Vim - disegna solo cose all'interno delle celle. Ciò significa che Vim e tmux usano entrambi lo stesso metodo per disegnare bordi verticali: usano solo un carattere simile a una pipa.

Tmux utilizza ( U+2502) per impostazione predefinita mentre Vim utilizza |( U+007C).

Se vuoi lo stesso separatore in Vim, puoi semplicemente usare lo stesso carattere:

set fillchars+=vert:│

Nota che il tuo schema di colori probabilmente imposta il colore di sfondo della divisione verticale. In tal caso, puoi rimuovere il colore di sfondo direttamente nel tuo schema di colori:

hi VertSplit ctermbg=NONE guibg=NONE

Ti ho battuto a questa conclusione di circa un minuto, ma grazie comunque. Non sono sicuro del perché abbia mai assunto il contrario. Immagino di aver avuto l'impressione che stesse facendo una sorta di personaggio Unicode che combinava magia per sovrapporre il separatore ai margini dello spazio del personaggio, ma ora mi rendo conto che ci penso consapevolmente quanto sarebbe ridicolo.
Caleb,

1
Risulta che ciò di cui avevo bisogno nel mio caso era hi VertSplit cterm=NONEperché è reverseun valore predefinito.
Lloeki,

Per caso sai come cambiare i separatori di tmux da '│' a, diciamo, '/'? @romainl
klaus

@EnanAjmain IIRC Ho trovato il separatore tmux nel suo codice sorgente. Non credo che ci sia un'opzione per questo, ma sono tutt'altro che un esperto di tmux, quindi dovresti controllare il manuale.
romainl

@romainl Penso che tu abbia ragione. Qualunque cosa importante potessi cambiare di tmux, dovevo hackerare il codice sorgente.
klaus

5

Anche nella mia schermata, tmux non sta usando alcuna magia, la divisione è ancora una colonna larga di un singolo personaggio. L'effetto visivo meno invadente è l'uso di un carattere di disegno della casella Unicode che è meno goffo rispetto al valore predefinito ASCII di vim e la mancanza di un colore di sfondo di evidenziazione.

Quasi quasi lo stesso effetto è possibile in vim aggiungendo qualcosa come le seguenti righe al file 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

L'uso di autocmdgarantisce che l'over-ride dell'evidenziazione rimanga attivo se si cambia combinazione di colori. È possibile che si desideri o meno questo comportamento poiché alcune combinazioni di colori hanno valori sensibili per questo gruppo di colori.

Si noti inoltre che cterm=NONEè necessario superare alcune combinazioni di colori che impostano questo valore reverse, ergo pasticciare con qualsiasi valore fg / bg che si tenta di utilizzare.


4

No, questo non può essere fatto in Vim e probabilmente sarebbe molto difficile da implementare in GVIM.

Vim si attacca all'indirizzamento basato su celle utilizzato nel terminale; all'interno di un buffer, questo è cruciale per una navigazione verticale coerente con j/ k. Questo indirizzamento tramite coordinate xey basate su celle è così radicato nell'implementazione di Vim, immagino sia molto difficile da superare.

Nota anche :help design-not:

  • Vim non è un elegante editor di GUI che cerca di apparire bello al costo di essere meno coerente su tutte le piattaforme.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.