vundle "sangría de plugin de tipo de archivo en" líos con ancho de tabulación

9

Instalé vundle ayer y, como lo hice, el ancho de tabulación que configuré en mi vimrc se ignora y se vuelve a establecer en 4 en lugar de 2.

Descubrí que la siguiente línea después del párrafo del paquete lo está causando:

filetype plugin indent on

Mi sangría está configurada así:

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

Puedes consultar mi vimrc completo aquí .

Probé el problema de sangría usando un script de python (donde la sangría realmente importa).

Ya he intentado cambiar filetype plugin indent ona filetype plugin on, pero eso no cambia nada. Solo comentar esa línea ayuda.
Ahora, la guía de instalación de vundle dice que esta línea es obligatoria.

¿Cómo soluciono este problema de sangría? ¿Puedo omitir la línea de tipo de archivo o es realmente obligatorio mantenerla en el vimrc?

Solución:

Gracias a @ChristianBrabandt y @romainl ahora encontré una solución que también puede residir en un solo archivo 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
fuente
A pesar de que no le responde a la pregunta, he intentado con vim de conexión en lugar de Vundle y funcionó perfectamente ...
nobe4
2
Ver el FAQ
Cristiano Brabandt
También puede usar el nuevo comando automático OptionSet para restablecer la configuración de ancho de pantalla y parada suave
Christian Brabandt

Respuestas:

10

Lo primero es lo primero; la línea a continuación no tiene absolutamente nada que ver con Vundle o la administración de complementos:

filetype plugin indent on

Ese comando hace tres cosas:

  • permite la detección de tipo de archivo,
  • habilita scripts específicos de tipo de archivo (ftplugins),
  • habilita guiones de sangría específicos de tipo de archivo.

Esa línea está ahí porque algunos administradores de complementos deben asegurarse de que la detección del tipo de archivo esté desactivada antes de hacer su magia y usar Vim para la programación sería mucho más difícil sin ftplugins y la sangría adecuada. Es mi opinión que simplemente deberían tratar internamente la detección de tipos de archivos, pero bueno ...

De todos modos, su problema es causado por ftplugins excesivamente posesivos que anulan su configuración de sangría con la de ellos. El ftplugin de Python es el culpable más común porque no hace mucho tiempo se decidió que debía aplicar PEP8.

La salida fácil sería evitar el abastecimiento de ftplugins por completo:

filetype indent on

pero generalmente vienen con cosas útiles, por lo que ese método no se recomienda realmente.

La solución más limpia es dejar la filetypelínea en su estado "óptimo":

filetype plugin indent on

y anule sus anulaciones con las suyas propias 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:

  • Eliminé smartindentporque no es tan inteligente para empezar y desaprobado por los guiones de sangría específicos de tipo de archivo de todos modos.
  • Reemplacé tus :executecomandos con comandos más limpios :letpara evitar la concatenación innecesaria.
romainl
fuente
1
Si establece shiftwidthen cero y softtabstopen -1, seguirá la configuración de tabulación.
Christian Brabandt
Gracias por tus explicaciones. Me gustaría mantener la mayoría de mis configuraciones en mi vimrc porque quiero sincronizarlas con varias computadoras. He utilizado su solución en mi vimrc y utilizamos el FAQ enlace @ChristianBrabandt registró a mi pregunta y funciona. Editaré mi pregunta para incluir mi solución.
wullxz
4

El problema de sangría proviene del ftplugin, que carga un archivo .vim /usr/share/vim/vim-version-/ftplugin/-filetype-.vimque anula lo que tenga en su .vimrcarchivo. puede averiguar dónde está ese archivo ejecutando el siguiente comando dentro de vim :verbose set tabstop?. El resultado lo dirigirá al archivo que anula su configuración.

En mi caso, estaba teniendo problemas con mi configuración de sangría de Python.

Una manera fácil de resolver esto es hacer lo siguiente:

Cree una carpeta .vim en su carpeta de inicio (si no la tiene)

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

Agregue lo siguiente:

setlocal noexpandtab shiftwidth=4 softtabstop=4 tabstop=4

Modifique lo que quiera en el comando. El mío se ve así porque trabajo con pestañas en lugar de espacios en blanco.

ysdelahoz
fuente