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ąć?

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.


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.


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

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.