¿Puede el separador dividido en vim tener menos de una columna completa de ancho?

21

Utilizo un administrador de ventanas de mosaico (impresionante) + un multiplexor de terminal (tmux) + divisiones dentro de vim. No tengo decoraciones para ventanas en absoluto, por lo que no hay una división visual entre ellas si el contenido del programa no lo delata. Estoy bastante cómodo con este paradigma, ya que de todos modos uso múltiples monitores y tareas grupales por pantalla. Si dos ventanas no tuvieran una razón para estar juntas, no estarían allí en primer lugar.

Sin embargo, esto crea un poco de disonancia visual donde la división visual más obvia es la semántica menos significativa.

  • Xorg window ‹|› window = nada en absoluto
  • Tmux pane ‹|› pane = 1px línea divisoria
  • Vim split ‹|› split = columna de color de 1 carácter de ancho

Aquí hay una muestra que muestra uno a cada lado de ventanas, paneles y divisiones vim:

cristales de ventanas y divisiones

Incluso sin hacer clic en la versión de resolución completa, la línea divisoria blanca que ve es la división menos significativa en la pantalla, los paneles vim. (Tenga en cuenta que la columna gris a la derecha de la sesión de vim es en realidad un resaltado de la columna 80, no un divisor de ningún tipo, aunque a menudo trabajo en ese tamaño).

Soy consciente de cómo cambiar el carácter dibujado en la división o reducir el contraste del esquema de color. Lo que me gustaría hacer es usar la misma barra dividida que tmux que no ocupa ningún ancho porque está dibujada entre columnas en lugar de en una. ¿Es esto posible con vim basado en terminal? Gvim? Neovim? Baring haciendo un separador visualmente discreto, ¿se puede apagar la columna divisoria por completo?

PD La razón por la que tiene sentido usar un separador visualmente similar es porque uso las mismas combinaciones de teclas para navegar entre los paneles tmux y las divisiones vim. Las mismas teclas navegan sin problemas entre ellas, solo tendría sentido si los límites visuales fueran los mismos también.

Caleb
fuente

Respuestas:

32

Estás equivocado sobre tmux. Al igual que todos los programas basados ​​en terminales, incluido Vim, solo dibuja cosas dentro de las celdas. Esto significa que Vim y tmux usan el mismo método para dibujar bordes verticales: solo usan un carácter similar a una tubería.

Tmux usa ( U+2502) por defecto mientras que Vim usa |( U+007C).

Si desea el mismo separador en Vim, simplemente puede usar el mismo carácter:

set fillchars+=vert:│

Tenga en cuenta que su esquema de colores probablemente establece el color de fondo de la división vertical. Si ese es el caso, puede eliminar el color de fondo directamente en su esquema de colores:

hi VertSplit ctermbg=NONE guibg=NONE
romainl
fuente
Te llegué a esta conclusión por aproximadamente un minuto, pero gracias de todos modos. No estoy seguro de por qué alguna vez asumí lo contrario. Supongo que tenía la impresión de que estaba haciendo una especie de personaje Unicode que combinaba magia para superponer el separador en el borde del espacio del personaje, pero ahora me doy cuenta de que pienso conscientemente en lo ridículo que sería eso.
Caleb
1
Resulta que lo que necesitaba en mi caso era hi VertSplit cterm=NONEporque es reversepor defecto.
Lloeki
¿Por casualidad sabes cómo cambiar los separadores tmux de '│' a, digamos, '/'? @romainl
klaus
@EnanAjmain IIRC Encontré el separador tmux en su código fuente. No creo que haya una opción para eso, pero estoy lejos de ser un experto en tmux, así que deberías consultar el manual.
romainl
@romainl Creo que tienes razón. Cualquier cosa importante que pude cambiar de tmux, tuve que hackear el código fuente.
Klaus
5

Incluso en mi propia captura de pantalla, tmux no está usando ninguna magia, la división sigue siendo una columna de un solo personaje. El efecto visual menos molesto es el uso de un carácter de dibujo de cuadro Unicode que es menos torpe que el valor predeterminado ASCII de vim, y la falta de un color de fondo resaltado.

Casi el mismo efecto es posible en vim agregando algo como las siguientes líneas al archivo 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

El uso de autocmdgarantías garantiza que el over-ride sobresaliente se mantenga vigente si cambia los esquemas de color. Es posible que desee o no este comportamiento, ya que algunos esquemas de color tienen valores razonables para este grupo de colores.

También tenga en cuenta que cterm=NONEes necesario anular algunos esquemas de color que configuran este valor reverse, ergo jugando con cualquier valor fg / bg que intente usar.

Caleb
fuente
4

No, esto no se puede hacer en Vim, y probablemente sería muy difícil de implementar en GVIM.

Vim se adhiere al direccionamiento basado en células utilizado en el terminal; dentro de un búfer, esto es crucial para una navegación vertical consistente con j/ k. Este direccionamiento por coordenadas x e y basadas en celdas está tan arraigado en la implementación de Vim que supongo que es muy difícil de superar.

También tenga en cuenta :help design-not:

  • Vim no es un elegante editor de GUI que intenta verse bien a costa de ser menos consistente en todas las plataformas.
Ingo Karkat
fuente