Ustawianie preferencji białych znaków Vima według typu pliku

155

W mojej pracy muszę przestrzegać stylu domowego w zakresie wcięć, który wygląda następująco:

  • 2 spacje przy kodowaniu html i ruby
  • tabs podczas kodowania javascript, z tabwidth = 4 zalecane

Jaki jest najlepszy sposób określenia różnych preferencji białych znaków dla każdego typu pliku?

nelstrom
źródło
Wszystkie te odpowiedzi wprawiły mnie w zakłopotanie. Problem polega na tym, że opcje zależą od preferencji. Zaakceptowana odpowiedź ma jednak ładną składnię. To był doskonały przewodnik: vimcasts.org/transcripts/2/en
Mikael Lindlöf

Odpowiedzi:

245

istnieje wiele sposobów, ale oto prosty, łatwy do zrozumienia sposób. dodaj te linie do swojego ~/.vimrc:

autocmd FileType html setlocal ts=2 sts=2 sw=2
autocmd FileType ruby setlocal ts=2 sts=2 sw=2
autocmd FileType javascript setlocal ts=4 sts=4 sw=4
Piotr
źródło
27
ts = 'liczba spacji, które <Tab> w pliku używa' sts = 'liczba spacji, które <Tab> wykorzystuje podczas edycji' sw = 'liczba spacji do użycia dla (automatycznego) kroku wcięcia', aby uzyskać szczegółowe informacje, zobacz: vimdoc.sourceforge .net / htmldoc / quickref.html # option-list
zdsbs
Musiałem dołączyć expandtab przynajmniej dla ruby, zobacz odpowiedź „za dużo php” tutaj
Michael Durrant
87

Odpowiedź Petera jest dość prosta, ale niestety opcje nie są właściwe. Zamiast tego musisz użyć następujących opcji:

autocmd Filetype html setlocal ts=2 sw=2 expandtab
autocmd Filetype ruby setlocal ts=2 sw=2 expandtab
autocmd Filetype javascript setlocal ts=4 sw=4 sts=0 noexpandtab

Zwróć również uwagę:

  • Możesz sprawić, by vim pokazywał znaki tabulacji używając :set list.
  • Gdy masz już ustawione opcje tabulacji / spacji, możesz zmusić vima do naprawy pliku (zamień spacje na tabulatory lub odwrotnie) używając :retab!polecenia.
za dużo php
źródło
2
Jaka jest korzyść z expandtabzakończeniasts=2
James McMahon,
12
@JamesMcMahon expandtab rozszerza wszystkie karty do spacji. sts (softtabstop) wstawia spacje i tabulatory dla wcięć: tyle tabulatorów, ile zmieści się w wcięciu na podstawie rozmiaru tabulatora, a następnie spacje po tym. Oczywiście, jeśli włączona jest karta expandtab, wszystkie wstawiane tabulatory są konwertowane na spacje. stackoverflow.com/questions/1562336/… może pomóc dalej. Bez rozwinięcia tabulatora odpowiedź Petera wstawiłaby tabulatory o szerokości 2 znaków, a nie spacje.
ajmccluskey
35

+1 do odpowiedzi Petera, ale Vim zapewnia również inne rozwiązanie. Jeśli chcesz zrobić coś bardziej skomplikowanego niż pojedynczy setlocal, na przykład skonfigurować całą gamę opcji, poleceń i mapowań naraz, na ratunek przychodzi funkcja wtyczki typu pliku vima.

Musisz mieć filetype plugin onlub filetype plugin indent onw swoim .vimrc, a następnie stworzyć wtyczkę do np. Rubiego możesz stworzyć ~/.vim/ftplugin/ruby.vim. Technicznie można używać żadnych poleceń, jak tu, aby uruchomić, gdy plik Ruby jest załadowany, ale rekomendowane te obejmują setlocal, map <buffer>, command -buffer, i funkcje definiujące. Wiele więcej informacji znajduje się w podręczniku użytkownika; jeśli dobrze znasz skryptowanie vima, przejdź do :help 41.11, w przeciwnym razie przeczytaj :help usr_40i :help usr_41.

Hobbs
źródło
10

Jest też fajny skrypt Vima : DetectIndent, który próbuje wykryć wcięcie pliku, który otwierasz. Jest to bardzo przydatne, jeśli pracujesz z wieloma plikami o różnych stylach kodowania.

Używam autokomendy w moim .vimrc :

:autocmd BufReadPost * :DetectIndent 
Benedikt Waldvogel
źródło
0

Aby wstawiać spacje po każdym naciśnięciu klawisza tabulatora, ustaw opcję „expandtab”:

:set expandtab

Następnym krokiem jest kontrolowanie liczby znaków spacji, które zostaną wstawione po naciśnięciu klawisza tabulacji, ustawienie opcji 'tabstop'. Na przykład, aby wstawić 2 spacje na tabulator, użyj:

:set tabstop=2

ref: http://vim.wikia.com/wiki/Converting_tabs_to_spaces

bartoindahouse
źródło