vundle "Dateityp Plugin Einzug ein" durcheinander mit Tabbreite

9

Ich habe gestern vundle installiert und seitdem wird die in meinem vimrc konfigurierte Tab-Breite ignoriert und auf 4 anstatt auf 2 zurückgesetzt.

Ich fand heraus, dass die folgende Zeile nach dem Vundle-Absatz dies verursacht:

filetype plugin indent on

Meine Einrückung ist wie folgt aufgebaut:

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

Sie können meine vollständige vimrc hier überprüfen .

Ich habe das Einrückungsproblem mit einem Python-Skript getestet (wobei Einrückung wirklich wichtig ist).

Ich habe bereits versucht, zu wechseln filetype plugin indent on, filetype plugin onaber das ändert nichts. Nur das Auskommentieren dieser Zeile hilft.
In der Vundle-Installationsanleitung heißt es nun, dass diese Zeile erforderlich ist.

Wie behebe ich dieses Einrückungsproblem? Kann ich die Dateitypzeile einfach weglassen oder ist es wirklich obligatorisch, sie im vimrc zu belassen?

Lösung:

Dank @ChristianBrabandt und @romainl habe ich jetzt eine Lösung gefunden, die sich auch in einer einzelnen vimrc-Datei befinden kann:

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
quelle
Obwohl es Ihre Frage nicht beantwortet, habe ich es mit Vim-Plug anstelle von Vundle versucht und es hat perfekt funktioniert ...
nobe4
2
Siehe die FAQ
Christian Brabandt
Sie können auch den neuen Optionsbefehl SetSet verwenden, um die Einstellung für Schichtbreite und Softtabstop zurückzusetzen
Christian Brabandt,

Antworten:

10

Das wichtigste zuerst; Die folgende Zeile hat absolut nichts mit Vundle oder Plugin-Management zu tun:

filetype plugin indent on

Dieser Befehl macht drei Dinge:

  • aktiviert die Dateityperkennung,
  • aktiviert filetypspezifische Skripte (ftplugins),
  • Aktiviert filettypspezifische Einrückungsskripte.

Diese Zeile ist vorhanden, da einige Plugin-Manager sicherstellen müssen, dass die Dateityperkennung deaktiviert ist, bevor sie ihre Magie ausführen. Die Verwendung von Vim für die Programmierung würde ohne ftplugins und korrekte Einrückung viel härter saugen. Ich bin der Meinung, dass sie sich einfach intern mit der Dateityperkennung befassen sollten, aber gut ...

Wie auch immer, Ihr Problem wird durch überbesessene Ftplugins verursacht, die Ihre Einrückungseinstellungen mit ihren überschreiben. Das Python-Ftplugin ist der häufigste Schuldige, da vor kurzem entschieden wurde, PEP8 durchzusetzen.

Der einfache Ausweg wäre, die Beschaffung von Ftplugins insgesamt zu vermeiden:

filetype indent on

Aber sie kommen normalerweise mit nützlichen Sachen, so dass diese Methode nicht wirklich empfohlen wird.

Die sauberste Lösung besteht darin, die filetypeLeitung in ihrem "optimalen" Zustand zu belassen:

filetype plugin indent on

und überschreiben Sie ihre Überschreibungen mit Ihren eigenen 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

Anmerkungen:

  • Ich habe es entfernt, smartindentweil es anfangs nicht so schlau ist und ohnehin von filetypspezifischen Einrückungsskripten nicht mehr unterstützt wird.
  • Ich habe Ihre :executeBefehle durch sauberere :letBefehle ersetzt, um unnötige Verkettungen zu vermeiden.
romainl
quelle
1
Wenn Sie shiftwidthauf Null und softtabstopauf -1 setzen, folgt dies der Tabstop-Einstellung.
Christian Brabandt
Vielen Dank für Ihre Erklärungen. Ich möchte die meisten meiner Einstellungen in meinem vimrc beibehalten, da ich sie mit mehreren Computern synchronisieren möchte. Ich habe Ihre Lösung in meinem vimrc verwendet und den FAQ- Link @ChristianBrabandt verwendet, der unter meiner Frage steht, und es funktioniert. Ich werde meine Frage bearbeiten, um meine Lösung einzuschließen.
Wullxz
4

Das Einrückungsproblem kommt vom ftplugin, das eine .vim-Datei lädt /usr/share/vim/vim-version-/ftplugin/-filetype-.vim, die alles überschreibt, was Sie in Ihrer .vimrcDatei haben. Sie können herausfinden, wo sich diese Datei befindet, indem Sie den folgenden Befehl in vim ausführen :verbose set tabstop?. Die Ausgabe verweist auf die Datei, die Ihre Konfiguration überschreibt.

In meinem Fall hatte ich Probleme mit meiner Python-Einrückungskonfiguration.

Eine einfache Möglichkeit, dies zu lösen, besteht darin, Folgendes zu tun:

Erstellen Sie einen .vim-Ordner in Ihrem Home-Ordner (falls Sie ihn nicht haben).

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

Fügen Sie Folgendes hinzu:

setlocal noexpandtab shiftwidth=4 softtabstop=4 tabstop=4

Ändern Sie, was Sie im Befehl wollen. Meins sieht so aus, weil ich mit Tabs anstelle von Leerzeichen arbeite.

ysdelahoz
quelle