Wczoraj zainstalowałem vundle, a ponieważ to zrobiłem, szerokość tabulacji, którą skonfigurowałem w moim vimrc, jest ignorowana i ustawiana z powrotem na 4 zamiast 2.
Dowiedziałem się, że przyczyną tego jest następujący wiersz po akapicie pełnym:
filetype plugin indent on
Moje wcięcie jest ustawione w ten sposób:
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
Możesz sprawdzić mój pełny vimrc tutaj .
Testowałem problem wcięcia za pomocą skryptu python (gdzie wcięcie naprawdę ma znaczenie).
Próbowałem już zmienia filetype plugin indent on
się filetype plugin on
, ale to niczego nie zmienia. Tylko komentowanie tej linii pomaga.
Teraz przewodnik instalacji Vundle mówi, że ta linia jest wymagana.
Jak rozwiązać ten problem z wcięciem? Czy mogę po prostu pominąć linię typu pliku, czy też naprawdę jest to konieczne, aby zachować ją w vimrc?
Rozwiązanie:
Dzięki @ChristianBrabandt i @romainl znalazłem rozwiązanie, które może również znajdować się w jednym pliku 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
źródło
Odpowiedzi:
Najpierw najważniejsze; poniższy wiersz nie ma absolutnie nic wspólnego z zarządzaniem Vundle lub wtyczkami:
To polecenie robi trzy rzeczy:
Ta linia jest tam, ponieważ niektórzy menedżerowie wtyczek muszą upewnić się, że wykrywanie typu pliku jest wyłączone, zanim zaczną działać, a użycie Vima do programowania byłoby znacznie trudniejsze bez ftplugins i odpowiedniego wcięcia. Moim zdaniem powinny one po prostu zajmować się wykrywaniem typu pliku wewnętrznie, ale dobrze…
W każdym razie twój problem jest spowodowany przez nadmiernie zaborcze wtyczki ftp, które zastępują twoje ustawienia wcięcia z ich. Python ftplugin jest najczęstszym winowajcą, ponieważ nie tak dawno temu postanowiono wymusić PEP8.
Najłatwiejszym sposobem byłoby całkowite uniknięcie pobierania ftplugins:
ale zwykle zawierają przydatne rzeczy, więc ta metoda nie jest tak naprawdę zalecana.
Najczystszym rozwiązaniem jest pozostawienie
filetype
linii w stanie „optymalnym”:i zastąp ich zastępowanie własnymi
after/ftplugin/python.vim
:Uwagi:
smartindent
ponieważ i tak nie jest to zbyt mądre i przestarzałe w przypadku skryptów wcięcia specyficznych dla typu pliku.:execute
polecenia czystszymi:let
poleceniami, aby uniknąć niepotrzebnego łączenia.źródło
shiftwidth
zero isofttabstop
-1, będzie on zgodny z ustawieniem tabstop.Problem z wcięciem pochodzi z ftplugin, który ładuje plik .vim,
/usr/share/vim/vim-version-/ftplugin/-filetype-.vim
który zastępuje wszystko, co masz w.vimrc
pliku. możesz dowiedzieć się, gdzie jest ten plik, uruchamiając następujące polecenie w vimie:verbose set tabstop?
. Dane wyjściowe wskażą plik, który przesłania konfigurację.W moim przypadku miałem problemy z konfiguracją wcięcia w Pythonie.
Prostym sposobem na rozwiązanie tego jest wykonanie następujących czynności:
Utwórz folder .vim w folderze domowym (jeśli go nie masz)
Dodaj następujące:
Zmodyfikuj, co chcesz w poleceniu. Mój wygląda tak, ponieważ pracuję z kartami zamiast białych znaków.
źródło