vundle “recuo do plug-in de tipo de arquivo” mexe com a largura de tabulação

9

Instalei o vundle ontem e, desde que o fiz, a largura de tabulação que configurei no meu vimrc é ignorada e definida como 4 em vez de 2.

Eu descobri que a seguinte linha após o parágrafo do vundle está causando isso:

filetype plugin indent on

Meu recuo é configurado assim:

set noexpandtab " Make sure that every file uses real tabs, not spaces
set shiftround  " Round indent to multiple of 'shiftwidth'
set smartindent " Do smart indenting when starting a new line
set autoindent  " Copy indent from current line, over to the new line

" Set the tab width
let s:tabwidth=2
exec 'set tabstop='    .s:tabwidth
exec 'set shiftwidth=' .s:tabwidth
exec 'set softtabstop='.s:tabwidth

Você pode conferir meu vimrc completo aqui .

Testei o problema do recuo usando um script python (onde o recuo realmente importa).

Eu já tentei mudar filetype plugin indent onpara, filetype plugin onmas isso não muda nada. Apenas comentar essa linha ajuda.
Agora, o guia de instalação do vundle diz que esta linha é necessária.

Como corrijo esse problema de recuo? Posso simplesmente omitir a linha de tipo de arquivo ou é realmente obrigatório mantê-la no vimrc?

Solução:

Graças a @ChristianBrabandt e @romainl, agora encontrei uma solução que também pode residir em um único arquivo vimrc:

filetype plugin indent on

[...]

set noexpandtab " Make sure that every file uses real tabs, not spaces
set shiftround  " Round indent to multiple of 'shiftwidth'
set autoindent  " Copy indent from current line, over to the new line

" Set the tab width
let s:tabwidth=2
au Filetype * let &l:tabstop = s:tabwidth
au Filetype * let &l:shiftwidth = s:tabwidth
au Filetype * let &l:softtabstop = s:tabwidth
wullxz
fonte
Mesmo que ele não responder, você pergunta, eu tentei com o vim-plug em vez de Vundle e ele funcionou perfeitamente ...
nobe4
2
Veja o FAQ
Christian Brabandt
Você também pode usar o novo autocommand optionset para repor o shiftwidth e configuração softtabstop
Christian Brabandt

Respostas:

10

Primeiras coisas primeiro; a linha abaixo não tem absolutamente nada a ver com o Vundle ou com o gerenciamento de plugins:

filetype plugin indent on

Esse comando faz três coisas:

  • permite a detecção de tipo de arquivo,
  • ativa scripts específicos do tipo de arquivo (ftplugins),
  • ativa scripts de recuo específicos do tipo de arquivo.

Essa linha existe porque alguns gerenciadores de plugins precisam garantir que a detecção de tipo de arquivo seja desativada antes de fazer sua mágica e o uso do Vim para programação seria muito mais difícil sem plug-ins e recuo adequado. É minha opinião que eles deveriam simplesmente lidar com a detecção de tipos de arquivos internamente, mas bem…

De qualquer forma, seu problema é causado por plug-ins excessivamente possessivos que substituem as configurações de indentação pelas deles. O python ftplugin é o culpado mais comum, porque foi decidido há pouco tempo que deveria aplicar o PEP8.

A saída mais fácil seria evitar o fornecimento completo de ftplugins:

filetype indent on

mas eles geralmente vêm com coisas úteis, para que esse método não seja realmente recomendado.

A solução mais limpa é deixar a filetypelinha em seu estado "ideal":

filetype plugin indent on

e substitua as substituições deles pelas suas after/ftplugin/python.vim:

setlocal noexpandtab
setlocal shiftround
setlocal autoindent

let s:tabwidth=2
let &l:tabstop = s:tabwidth
let &l:shiftwidth = s:tabwidth
let &l:softtabstop = s:tabwidth

Notas:

  • Eu removi smartindentporque não é tão inteligente assim e descontinuado pelos scripts de recuo específicos do tipo de arquivo.
  • Substituí seus :executecomandos por :letcomandos mais limpos para evitar concatenações desnecessárias.
romainl
fonte
11
Se você definir shiftwidthzero e softtabstop-1, seguirá a configuração tabstop.
Christian Brabandt
obrigado por suas explicações. Gostaria de manter a maioria das minhas configurações no meu vimrc porque quero sincronizá-las com vários computadores. Usei a sua solução no meu vimrc e usei o link de perguntas frequentes @ChristianBrabandt postado abaixo da minha pergunta e ele funciona. Vou editar minha pergunta para incluir minha solução.
wullxz
4

O problema do recuo vem do ftplugin, que carrega um arquivo .vim /usr/share/vim/vim-version-/ftplugin/-filetype-.vimque substitui o que você tem no seu .vimrcarquivo. você pode descobrir onde está esse arquivo executando o seguinte comando no vim :verbose set tabstop?. A saída apontará para o arquivo que está substituindo sua configuração.

No meu caso, eu estava tendo problemas com minha configuração de indentação python.

Uma maneira fácil de resolver isso é fazer o seguinte:

Crie uma pasta .vim na sua pasta pessoal (se você não a tiver)

cd ~/.vim
mkdir -p after/ftplugin/
cd ~/.vim/after/ftplugin/
vim python.vim

Adicione o seguinte:

setlocal noexpandtab shiftwidth=4 softtabstop=4 tabstop=4

Modifique o que você quiser no comando. O meu fica assim porque trabalho com guias em vez de espaços em branco.

ysdelahoz
fonte