Exibindo guias como caracteres

119

Quando trabalho em arquivos em python, às vezes confundo abas por espaços e vice-versa. Existe uma maneira de conseguir que o Vim exiba um caractere para uma guia em vez de uma guia?

Dom
fonte
Apenas como uma observação lateral, você pode configurar para converter todas as guias em espaços retabsempre que salvar o arquivo.
0xc0de 15/03
Se você instalou o vim-faq , poderá obter uma resposta offline lá: :h vim-faqe pesquisar /invisible. A tag difícil de memorizar é :h faq-19.8.
Hotschke

Respostas:

119

Sim, use listchars:

set list
set listchars=tab:>-

Se você colocar essas duas linhas em seu .vimrc, as guias serão mostradas como >na posição inicial e -no restante da guia.

(Sidenote: listchars também pode mostrar espaços à direita com trail:x(substitua xpelo caractere que você deseja usar para um espaço à direita), o que também pode ser útil.)

Maçaneta
fonte
6
Nota: Eu gosto de usar set listchars=tab:!·,trail:·, o IMHO ·é muito mais claro do que um -... Você precisa de uma versão bastante recente do Vim para que isso funcione (não tenho certeza qual exatamente, acho que 7.3.x) ...
Martin Tournoij
8
Eu gosto de usar o caractere unicode , pois é um pouco menor que >. Atualmente, vejo espaços em branco marcando o eol (embora eu possa tentar o acima). Minhas configurações são: set listchars=eol:¬,tab:▸\ e
Martin York
58

A resposta básica é :set list, o que faz com que as guias sejam exibidas como ^I.

No entanto, eu recomendo ir além disso. Just :set listé problemático, pois falha em preservar o alinhamento visual na tela. Por exemplo:

%.o: %.cpp
^Ig++ -c $<

não parece bom, especialmente quando você espera que o gdos g++que aparecem sob o primeiro pde cpp(supondo tabstop=8).

Portanto, sugiro que .vimrcvocê coloque algo como :set listchars=tab:␉· (Para ser claro, esse é o caractere Unicode U + 2409 SÍMBOLO PARA TABULAÇÃO HORIZONTAL seguido de U + 00B7 MIDDLE DOT .)

Conforme explicado em :help listchars, uma configuração de dois caracteres para tab:xypreservar o alinhamento visual:

tab:xy        Two characters to be used to show a tab.  The first
              char is used once.  The second char is repeated to
              fill the space that the tab normally occupies.
              "tab:>-" will show a tab that takes four spaces as
              ">---".  When omitted, a tab is show as ^I.

O exemplo acima apareceria na tela como:

%.o: %.cpp
␉·······g++ -c $<

Pessoalmente, eu concordo com o meu listchars:

:set listchars=eol:⏎,tab:␉·,trail:␠,nbsp:⎵

Esses caracteres são distintos o suficiente para que raramente apareçam literalmente no texto do documento.

Para digitar esses caracteres especiais no seu vimrc, digite Ctrl-vu23CEenquanto estiver no Modo Inserir, conforme explicado em :help utf-8-typing.

200_success
fonte
2
Veja tambémset lcs=tab:├─
sch
isso só me deu uma? em eol
WendyG
14

Guias de destaque

TabDestaque temporário

Para uso ocasional, pode-se simplesmente destacar todas as guias em um documento usando o seguinte /comando de pesquisa :

/\t

Para remover o realce, basta digitar o :nohque significa abreviação :nohlsearch- sem iluminação alta.

TabDestaque permanente

" Highlight tabs as errors.
" https://vi.stackexchange.com/a/9353/3168
match Error /\t/

Guia destacando no vim

Mais destaque

Para obter mais desses comandos úteis de destaque - incluindo combinados com espaços em branco à direita e tornando isso permanente - consulte o wiki do Vim .

Serge Stroobandt
fonte
4
Você também pode usar :match Error /\t/para destacar guias (ou qualquer outro padrão) independentemente do registro de pesquisa e hlsearch (digite :matchpara limpá-lo).
Martin Tournoij 25/08/16
11
@Carpetsmoker Pode-se encontrar muito mais desses comandos úteis de destaque (incluindo combinados com espaços em branco à direita!) No wiki do Vim sobre como destacar espaços indesejados .
Serge Stroobandt
9

Pessoalmente, gosto do uso do plugin indentLine , que exibe uma linha vertical nos níveis de indentação.

É de grande ajuda, especialmente em python, onde o recuo é importante.

(Imagem retirada do link acima)

Entre outras coisas, fornece um comando de alternância, que pode ser mapeado para uma combinação de teclas, para que você possa desativá-lo quando não precisar.

Mike
fonte
2
Eu acredito que este plugin é destinado a espaços recuando embora?
Jake Byman
5

Você pode mostrar abas de maneira diferente em um terminal comum e no gvim.

set list!
if has('gui_running')
    set listchars=tab:▶\ ,trail:·,extends:\#,nbsp:.
else
    set listchars=tab:>.,trail:.,extends:\#,nbsp:.
endif

(Adicionando a integridade, caso outros achem útil).

ideasman42
fonte
4

O método mais fácil é o de fazer :set list, que mostrará as guias como ^Ie o fim da linha como $.

Eu gosto de usar um mapeamento que chama

:set invlist 

para alternar entre exibição regular e exibição de lista.

Por exemplo:

:nmap <leader>l :set invlist<cr>

Isso me permite verificar rapidamente se há problemas de tabulação versus espaço e voltar a uma exibição regular.

John O'M.
fonte