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.