Como adicionar guias / linhas de indentação


42

No Sublime Text 2, você obtém guias verticais onde está o seu recuo, assim:

Captura de tela de texto sublime

mas no vim eu obviamente não:

captura de tela do vim

Existe uma maneira de mostrar linhas como essa no vim? A propósito, meu recuo é de 2 espaços.

:set tabstop=2 softtabstop=2 shiftwidth=2 expandtab

Respostas:


39

Resposta unificada:

Se você estiver usando guias

Eu tentaria usar listchars:

:set listchars=tab:\|\ 
:set list

nota: existe um espaço após o último \acima.

Esse método é bom porque usa o suporte interno do Vim para mostrar esse tipo de coisa.

Exemplo de saída:

|       if (1) {
|       |       func();
|       }

captura de tela da amostra de texto acima

No entanto, isso não funciona para espaços à esquerda. Conforme apontado por @Josh Petrie, há um patch para trabalhar por espaços , mas você teria que recompilar o Vim, que está além do escopo desta resposta.

Se você estiver usando espaços e não se importar de usar um plug-in

Vaibhav Sagar aponta que o plugin indentLine executa essa funcionalidade.

Instale da maneira normal (consulte a instalação de plug-ins ) e parece que magicamente funciona apenas sem mais informações. Se você não se importa com as barras ASCII, não precisa fazer nada com suas fontes. Exemplo de saída do seu exemplo após definir as configurações de recuo e executar:IndentLinesReset

45   ¦ var move = function(direction) {
46   ¦ ¦ if(!initialized) { initialize(); }
47 
48   ¦ ¦ if(shiftBoard(direction)) {
49   ¦ ¦ ¦ setTimeout(addRandomPiece, 100);
50   ¦ ¦ }
51   ¦ };

captura de tela do exemplo com espaços

O plug-in requer o Vim 7.3 ou posterior e utiliza o cutelo do recurso Conceal dessa versão. Em vez de ocultar o texto, ele substitui o texto por barras na exibição, mas não o buffer real. O resultado é que você vê as barras, mas elas não são salvas no arquivo (pois na verdade são espaços)

Embargo

Ambos os métodos assumem código recuado "corretamente". Eles não colocam as linhas de recuo no nível do recuo quando um "bloco" é aberto (o que sublime parece ser), mas, em vez disso, coloca as linhas em intervalos regulares com base nas configurações de recuo. Além disso, ele mostra apenas as barras nas linhas onde realmente há espaço (e é por isso que a linha na saída do vim sob a primeira ifnão possui barras, criando uma lacuna visual)


Na verdade, estou usando espaços para recuar em vez de guias. Eu atualizei minha pergunta.
precisa saber é o seguinte

Oh. Bem, isso exigirá mais pesquisas.
John O'M.

1
Há um patch para fazer com que os listchars funcionem em espaços não finais, que você pode desenterrar na lista de discussão. Entretanto, ele não foi aceito na distribuição oficial :(

1
Resposta atualizada para incluir informações de Vaibhav Sagar e Josh Petrie. Experimentei o plugin que Vaibhav mencionou e mostrei os resultados na resposta editada. Eu acho que vou começar a usar esse plugin. Não é fantástico, mas em geral parece funcionar muito bem.
John O'M.

1
O indentLine funciona bem para python, json, viml, c, c ++, etc. Mas, infelizmente, ele não funciona com vim-javascript, então, em vez disso, vim-indent-Guides.
Sassan

19

Outra opção que eu uso, que não é exatamente o que você solicitou, mas cumpre o mesmo objetivo de facilitar a visualização do que está na mesma coluna, é definir o seguinte no seu vimrc:

set cursorcolumn
set cursorline

ilustração de cursorcolumn

Isso significa que você precisa mover o cursor para a coluna que deseja ver, mas obtém menos confusão visual. Normalmente, quando me preocupo com os níveis de recuo, mantenho meu lugar com o cursor de qualquer maneira. Meu jeito também não é tão desajeitado em linguagens como python sem usar chaves.


Usuários de Python vi morrerão para este recurso
shuva

18

Por uma questão de integridade, também há o plug-in Guias de recuo , que mostra os níveis de recuo alternando as cores dos espaços em branco. Requer a versão 7.2 ou posterior. Como ele usa as variáveis tabstope shiftwidth, provavelmente funcionará imediatamente nas configurações de indentação.

Imgur

Depois que o plugin estiver instalado, você pode simplesmente usar :IndentGuidesEnableou :IndentGuidesDisable. Se você estiver usando o terminal vim, observe que, de acordo com o manual,

No momento, o Terminal Vim possui apenas suporte básico. Isso significa que as cores não serão calculadas automaticamente com base no seu esquema de cores. Em vez disso, algumas cores predefinidas são usadas dependendo de o fundo estar definido como escuro ou claro.

Para alterar as cores dos guias da captura de tela, usei o seguinte

let g:indent_guides_auto_colors=0

para que as cores não sejam recalculadas quando os buffers são trocados e defina as cores usando

hi IndentGuidesEven ctermbg=238
hi IndentGuidesOdd ctermbg=236

Como nas outras soluções apresentadas, ele mostra apenas as guias de recuo nas linhas, onde existem espaços.


adicione let g:indent_guides_enable_on_vim_startup=1ao meu .vimrc para habilitar isso na inicialização.
In19

9

Eu achei o plugin indentLine o melhor para isso. Você precisa de uma fonte com os símbolos apropriados; acho que o Consolas no Windows e o Menlo no Mac OS X funcionam bem. Como indicado na resposta unificada acima, ele funciona (ab) usando o concealrecurso do vim para colocar barras verticais (da fonte usada) no lugar certo. Estou muito feliz com esta solução, mas a desvantagem é que minhas barras verticais fazem parte dos glifos de desenho de caixa e são alinhadas ao centro em vez de alinhadas à esquerda, como em outros editores. Eu me acostumei com isso, mas ele pode ser corrigido corrigindo manualmente sua fonte ou usando uma fonte como Fantasque Sans Mono (observe como as capturas de tela no repositório vinculado do github usam indentLine).


4
Dê uma olhada em nossa discussão sobre respostas apenas para plugins e considere atualizar sua resposta com mais informações.

Meu erro, atualizei minha resposta.
Vaibhav Sagar

Qual glifo é a linha vertical corrigida? Você pode colar aqui? Obrigado.
Timtro 7/03/18

2

O plug-in indentLine tende a ser bastante lento em arquivos não pequenos, observáveis ​​ao clicar em enter, pois fica mais ou menos um segundo.

Descobri que o vim-indentguides é um plug-in mais rápido e visualmente semelhante, que também distingue visualmente os recuos da guia versus os recuos do espaço.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.