No Vim, como posso determinar automaticamente se devo usar espaços ou tabulações para recuo?

4

Às vezes, edito outros códigos-fonte nos quais o estilo predominante é usar guias. Neste caso, quero manter a convenção existente de usar guias literais.

Para arquivos que eu mesmo criei e arquivos que usam espaços como o estilo de recuo predominante, desejo usá-lo em seu lugar.

Como posso fazer isso no vim?

    
por Chris Down 31.01.2013 / 06:58

2 respostas

7

Você pode usar algo assim em ~/.vimrc para ajustar-se a usar espaços / guias, conforme apropriado:

" By default, use spaced tabs.
set expandtab

" Display tabs as 4 spaces wide. When expandtab is set, use 4 spaces.
set shiftwidth=4
set tabstop=4

function TabsOrSpaces()
    " Determines whether to use spaces or tabs on the current buffer.
    if getfsize(bufname("%")) > 256000
        " File is very large, just use the default.
        return
    endif

    let numTabs=len(filter(getbufline(bufname("%"), 1, 250), 'v:val =~ "^\t"'))
    let numSpaces=len(filter(getbufline(bufname("%"), 1, 250), 'v:val =~ "^ "'))

    if numTabs > numSpaces
        setlocal noexpandtab
    endif
endfunction

" Call the function after opening a buffer
autocmd BufReadPost * call TabsOrSpaces()
    
por 31.01.2013 / 06:58
0

Existe uma variedade de plugins para isso, por exemplo (começando com o meu):

  • My IndentConsistencyCop examina o recuo do buffer e analisa larguras e métodos de recuo usados. Se houver conflitos ou se for ruim combinações de abas e espaços são encontradas, alerta você e oferece ajuda localizando os infratores - assim como um policial amigável: >
  • O Localizador de Indentação é um script Python e um plug-in Vim que verifica qualquer buffer carregado e configura as configurações de recuo apropriadas
  • yaifa.vim é uma porta para o vimscript do acima
  • detectindent.vim por Ciaran McCreesh tenta detectar automaticamente as configurações de recuo
  • GuessIndent é baseado em detectindent.vim
  • indentdetect.vim por Eric Van Dewoestine realiza uma detecção simples e pode definir padrões baseado no arquivo filespec
  • matchindent.vim detecta guias, recuos de 2 e 4 espaços e adapta as configurações de recuo em conformidade
  • sleuth.vim por Tim Pope ajusta automaticamente 'shiftwidth' e 'tabstop' heuristicamente (através de uma amostragem simplista que não verifica para recuos ruins ou inconsistentes) ou observando outros arquivos da mesma escreva
  • filestyle realça as guias quando 'expandtab' é definido, espaços à direita e linhas maiores que 'textwidth', mas na verdade não verifique a conformidade com o recuo
  • ShowSpaces realça os espaços dentro do recuo, por buffer / filetype.
  • Detector de recuo executado quando um arquivo é aberto ou escrito, tem avisos sobre o recuo de tabulação / espaço misto e pode adaptar o correspondente do Vim opções automaticamente.
por 29.10.2018 / 15:06