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?



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

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.

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.


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 

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

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.