O separador de divisão no vim pode ter menos do que uma coluna completa?

21

Eu uso um gerenciador de janelas lado a lado (impressionante) + um multiplexador de terminal (tmux) + divisões dentro do vim. Eu não tenho nenhuma decoração de janela, então você não tem uma divisão visual entre elas se o conteúdo do programa não a revelar. Estou bastante confortável com esse paradigma, pois, de qualquer maneira, uso vários monitores e agrupo tarefas por tela. Se duas janelas não tivessem um motivo para estar lado a lado, elas não estariam lá em primeiro lugar.

No entanto, isso cria um pouco de dissonância visual, onde a divisão visual mais óbvia é a menos significativa semanticamente.

  • Janela do Xorg ‹|› window = nada
  • Painel Tmux ‹|› painel = linha divisória de 1px
  • Divisão Vim ‹|› divisão = coluna colorida de 1 caractere

Aqui está uma amostra mostrando uma de cada lado das janelas, painéis e divisões do vim:

janelas e divisões

Mesmo sem clicar na versão em resolução máxima, a linha divisória branca que você vê é a divisão menos significativa na tela, os painéis do vim. (Observe que a coluna cinza à direita da sessão do vim é na verdade um destaque da oitava coluna, não um divisor de qualquer tipo, embora eu trabalhe com esse tamanho com frequência).

Estou ciente de como alterar o caractere desenhado na divisão ou reduzir o contraste do esquema de cores. O que eu gostaria de fazer é usar a mesma barra de divisão que o tmux que não ocupa nenhuma largura porque é desenhada entre colunas e não em uma. Isso é possível com o vim baseado em terminal? Gvim? Neovim? Exceto na criação de um separador visualmente discreto, a coluna divisória pode ser totalmente desativada?

PS: O motivo pelo qual um separador visualmente semelhante faz sentido é porque eu uso as mesmas combinações de teclas para navegar entre os painéis tmux e divisões do vim. As mesmas teclas navegam perfeitamente entre elas, só faria sentido se os limites visuais fossem os mesmos também.

Caleb
fonte

Respostas:

32

Você está errado sobre o tmux. Como todo programa baseado em terminal - incluindo o Vim - ele apenas desenha coisas dentro das células. Isso significa que o Vim e o tmux usam o mesmo método para desenhar bordas verticais: eles apenas usam um caractere semelhante a um tubo.

O Tmux usa ( U+2502) por padrão, enquanto o Vim usa |( U+007C).

Se você deseja o mesmo separador no Vim, pode simplesmente usar o mesmo caractere:

set fillchars+=vert:│

Observe que seu esquema de cores provavelmente define a cor de fundo da divisão vertical. Nesse caso, você pode remover a cor de fundo diretamente no esquema de cores:

hi VertSplit ctermbg=NONE guibg=NONE
romainl
fonte
Eu venci você nesta conclusão em cerca de um minuto, mas obrigado de qualquer maneira. Não sei por que assumi o contrário. Acho que fiquei com a impressão de que ele estava fazendo algum tipo de caractere Unicode combinando magia para sobrepor o separador na borda do espaço de caracteres, mas agora percebo que penso nisso conscientemente como isso seria ridículo.
Caleb
11
Acontece que o que eu precisava no meu caso era hi VertSplit cterm=NONEporque é o reversepadrão.
Lloeki
Por acaso você sabe como mudar os separadores tmux de '│' para, digamos, '/'? @romainl
klaus
@EnanAjmain IIRC Encontrei o separador tmux em seu código-fonte. Eu não acho que haja uma opção para isso, mas estou longe de ser um especialista em tmux, então você deve verificar o manual.
Romainl
@romainl Eu acho que você está certo. Qualquer coisa importante que eu consegui mudar do tmux, tive que invadir o código fonte.
Klaus #
5

Mesmo na minha própria captura de tela, o tmux não está usando nenhuma mágica, a divisão ainda é uma coluna de um único caractere. O efeito visual menos invasivo é o uso de um caractere de desenho de caixa Unicode que é menos desajeitado que o padrão ASCII do vim e a falta de uma cor de fundo destacada.

Quase o mesmo efeito é possível no vim adicionando algo como as seguintes linhas ao arquivo 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

O uso de autocmdgarantias de que a substituição do destaque permanece em vigor se você alternar os esquemas de cores. Você pode ou não querer esse comportamento, pois algum esquema de cores tem valores sensíveis para esse grupo de cores.

Observe também que cterm=NONEé necessário substituir alguns esquemas de cores que definem esse valor e reverse, portanto, mexer com os valores de fg / bg que você tentar usar.

Caleb
fonte
4

Não, isso não pode ser feito no Vim e provavelmente seria muito difícil de implementar no GVIM.

O Vim adere ao endereçamento baseado em célula usado no terminal; dentro de um buffer, isso é crucial para uma navegação vertical consistente com j/ k. Esse endereçamento por coordenadas x e y baseadas em células está tão arraigado na implementação do Vim, que acho muito difícil de superar.

Observe também :help design-not:

  • O Vim não é um editor de GUI sofisticado que tenta parecer bonito ao custo de ser menos consistente em todas as plataformas.
Ingo Karkat
fonte