Jak mogę zmienić domyślne wcięcie na podstawie typu pliku?

34

Chciałbym mieć różne wcięcia w zależności od typu pliku, nad którym pracuję. Na przykład, pracując nad .cplikiem chciałbym, aby moje wcięcie składało się z 4 spacji. W .htmlplikach chciałbym (muszę) pracować z kartami.

Jak to osiągnąć?

DeltaLima
źródło

Odpowiedzi:

25

Najlepszą metodą jest wprowadzenie tych ustawień ~/.vim/after/ftplugin/<filetype>.vim.

W przypadku HTML (zakładając, że potrzebujesz zakładek o szerokości 4 znaków):

~/.vim/after/ftplugin/html.vim

setlocal shiftwidth=4
setlocal softtabstop=4
setlocal noexpandtab

Korzystanie z ftplugin jest preferowane przy użyciu komend automatycznych, ponieważ Vim już sam sprawdza typy plików i już próbuje zdobyć odpowiednie ftplugin, więc nie ma powodu, aby wymuszać jeszcze więcej kontroli i ponownie wdrażać koło.

-- edytować --

Zakładając, że masz filetype plugin onw swoim vimrc- co powinieneś - Vim spróbuje wykryć typ pliku plików, które edytujesz, a gdy zostanie znaleziony prawidłowy typ pliku i ustawiony dla bufora, spróbuj znaleźć odpowiedni ftplugin w tych standardowych lokalizacjach:

$VIMRUNTIME/ftplugin/html.vim
~/.vim/ftplugin/html.vim
~/.vim/ftplugin/after/html.vim

Wszystko to dzieje się automatycznie, więc jeśli Twój typ pliku zostanie rozpoznany przez Vima, nie ma absolutnie żadnego powodu, aby dodawać jakąkolwiek logikę wykrywania typu pliku: wystarczy dodać ustawienia do właściwej wtyczki ftpl i jesteś dobry.

romainl
źródło
Czy muszę jakoś aktywować ftplugin, czy też tworzenie plików aktywuje go automatycznie?
DeltaLima,
Upewnij się, że masz filetype plugin indent onw swoim vimrc.
romainl
1
@DeltaLima vim ma ścieżkę, przez którą przechodzi, aby sprawdzić ustawienia. Tak długo, jak filetype plugin onjest ustawiony, ścieżka vima zawiera pliki ftplugin/<filetype>.vimi after/ftplugin/<filetype>/vimna swojej ścieżce.
davidlowryduda
@DeltaLima, proszę zobaczyć moją edycję.
romainl
14

Możesz to zrobić za pomocą poleceń automatycznych w swoim .vimrc.

Na przykład mam funkcję, html_like_modektóra konfiguruje różne rzeczy do edycji plików HTML. W moim .vimrcmam:

au BufNewFile,BufRead *.html call s:html_like_mode()

To wyłącza rozszerzenie pliku. Możesz także wyłączyć typ pliku, jeśli masz to włączone:

au FileType perl setlocal equalprg=perltidy

Jak widać, możesz tam zrobić dowolne polecenie. Więc możesz łatwo zrobić a setlocal shiftwidth 4dla swoich plików * .c.

derobert
źródło
9

augroupumożliwia grupowanie powiązanych poleceń automatycznych w nazwane grupy. (Zobacz tutaj, aby dowiedzieć się o grupach poleceń automatycznych.) Używamy augroups, aby dodać polecenia automatyczne ~/.vimrcw sposób, który nie doda duplikatu za każdym razem, gdy je pozyskujemy .

augroup vimrc
  autocmd!
augroup END

autocmd vimrc FileType html setlocal shiftwidth=4 tabstop=4
shawndumas
źródło
2
Przydałoby się wyjaśnienie, co to robi i jak to skonfigurować, nie wszyscy będą wiedzieć;)
Seth
3

Używane autocmd i FileType

autocmd FileType html setlocal shiftwidth=4 tabstop=4
avelino
źródło