Jak zmienić wtyczki specyficzne dla języka w vimie?

0

Piszę SML program i próbuję zmienić rozmiar wcięć. Jeśli dodam następujące do mojego .vimrc plik

set tabstop=8
set shiftwidth=8
set expandtab

Nie ma to odzwierciedlenia w moich rzeczywistych plikach. Wiem to, ponieważ kiedy otwieram .sml plik i typ :set ujawnia to shiftwidth=2

Wierzę, że vim używa a sml wtyczka, ponieważ moja .vimrc plik (podobny do domyślnego) ma następujące brzmienie:

if has("autocmd")

  " Enable file type detection.
  " Use the default filetype settings, so that mail gets 'tw' set to 72,
  " 'cindent' is on in C files, etc.
  " Also load indent files, to automatically do language-dependent indenting.
  filetype plugin indent on

Po pierwsze, Co oznacza, jeśli ma („autocmd”)? I drugi Jak mogę dostosować domyślny rozmiar wcięcia dla plików .sml? Gdzie mogę znaleźć tę wtyczkę (jeśli rzeczywiście jest to problem? Nadal chcę zachować pozostałe funkcje wtyczki sml.

Nosrettap
źródło

Odpowiedzi:

2

autocmd s są specjalnymi poleceniami wyzwalanymi na określonych zdarzeniach lub na określonych typach plików. Są one często używane do ustawiania opcji lub definiowania odwzorowań, które mają sens w jednym języku, ale nie w innych.

Od autocmd s są szeroko stosowane w przypadku określonych plików, if has("autocmd") to sposób na sprawdzenie, czy autocmd funkcja jest dostępna i możemy iść dalej bez większego ryzyka.

Właściwą lokalizacją do przechowywania ustawień specyficznych dla typu pliku jest ~/.vim/after/ftplugin/<filetype>.vim, więc powinieneś zapisać swoje ustawienia w:

~/.vim/after/ftplugin/sml.vim

Ten plik pochodzi od Vima po domyślny ftplugin, dzięki czemu możesz na przykład zmienić tylko wartość tabstop i zachowaj pozostałe ustawienia.

Jednak patrząc na moje własne środowisko wykonawcze Vim ( /usr/share/vim/vim73 ) wygląda na to, że nie ma ftplugina sml. To znaczy że ~/.vim/ftplugin/sml.vim byłby równie właściwym wyborem lokalizacji. Wybierz ten, który ci się podoba.

W tym pliku po prostu dodaj potrzebne linie:

setlocal tabstop=8
setlocal shiftwidth=8
setlocal expandtab

a ty jesteś ustawiony.

romainl
źródło
0

Pisanie na maszynie :help autocmd powie Ci, co robi autocmd. Zasadniczo oznacza to, że vim może automatycznie wykonywać polecenia po pewnych zdarzeniach.

Możesz pisać :echo $VIMRUNTIME aby zobaczyć, gdzie vim przechowuje swoje wtyczki systemowe. Prawdopodobnie będzie katalog składni, wcięć i ftplugin z plikami, które zostaną automatycznie załadowane po załadowaniu odpowiedniego pasującego typu pliku.

Alternatywnie te pliki będą w tych samych katalogach pod katalogiem ~ / .vim

Steven
źródło