Respostas:
Resposta unificada:
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();
| }
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.
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 ¦ };
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)
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 if
não possui barras, criando uma lacuna visual)
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
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.
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 tabstop
e shiftwidth
, provavelmente funcionará imediatamente nas configurações de indentação.
Depois que o plugin estiver instalado, você pode simplesmente usar :IndentGuidesEnable
ou :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.
let g:indent_guides_enable_on_vim_startup=1
ao meu .vimrc para habilitar isso na inicialização.
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 conceal
recurso 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).
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.