Czy ktoś mógłby mi wyjaśnić w prosty sposób najprostszy sposób zmiany zachowania wcięcia Vima w zależności od typu pliku? Na przykład, jeśli otworzę plik Python, powinien wciąć 2 spacje, ale jeśli otworzę skrypt Powershell, powinien użyć 4 spacji.
Czy ktoś mógłby mi wyjaśnić w prosty sposób najprostszy sposób zmiany zachowania wcięcia Vima w zależności od typu pliku? Na przykład, jeśli otworzę plik Python, powinien wciąć 2 spacje, ale jeśli otworzę skrypt Powershell, powinien użyć 4 spacji.
Odpowiedzi:
Możesz dodawać .vim
pliki do wykonania, gdy vim przełączy się na określony typ pliku.
Na przykład mam plik ~/.vim/after/ftplugin/html.vim
z tą zawartością:
setlocal shiftwidth=2
setlocal tabstop=2
Co powoduje, że vim używa tabulacji o szerokości 2 znaków do wcięcia ( noexpandtab
opcja jest ustawiona globalnie gdzie indziej w mojej konfiguracji).
Jest to opisane tutaj: http://vimdoc.sourceforge.net/htmldoc/usr_05.html#05.4 , przewiń w dół do sekcji dotyczącej wtyczek typów plików.
~/.vim/after/ftplugin/html.vim
. Ale jak zauważyli inni, o wiele przyjemniej jest po prostu dodać autocmd FileType html setlocal shiftwidth=2 tabstop=2
do swojego .vimrc
.
autocmd FileType javascript setlocal shiftwidth=2 tabstop=2
)
filetype plugin on
do swojego vimrc.
Użyj ftplugins lub poleceń automatycznych, aby ustawić opcje.
W ~/.vim/ftplugin/python.vim:
setlocal shiftwidth=2 softtabstop=2 expandtab
I nie zapomnij włączyć ich w ~/.vimrc
:
filetype plugin indent on
( :h ftplugin
więcej informacji)
W ~/.vimrc
:
autocmd FileType python setlocal shiftwidth=2 softtabstop=2 expandtab
Można zastąpić każdy z długich poleceń i ustawień z ich krótkimi wersjami:
autocmd
: au
setlocal
: setl
shiftwidth
: sw
tabstop
: ts
softtabstop
: sts
expandtab
:et
Sugerowałbym również poznanie różnicy między tabstop
i softtabstop
. Wiele osób nie wie o tym softtabstop
.
sw
jest skrótem softwidth
, sts
jest skrótem softtabstop
, et
jest skrótem expandtab
, setl
jest skrótem setlocal
i au
jest skrótem autocmd
. Możesz użyć długich formularzy zamiast krótkich formularzy.
sw
że shiftwidth
raczej się rozwija softwidth
.
edytuj ~/.vimrc
i dodaj różne typy plików dla różnych wcięć, np. Chcę html/rb
wcięcia na 2 spacje i js/coffee
pliki wcięcia na 4 spacje:
" by default, the indent is 2 spaces.
set shiftwidth=2
set softtabstop=2
set tabstop=2
" for html/rb files, 2 spaces
autocmd Filetype html setlocal ts=2 sw=2 expandtab
autocmd Filetype ruby setlocal ts=2 sw=2 expandtab
" for js/coffee/jade files, 4 spaces
autocmd Filetype javascript setlocal ts=4 sw=4 sts=0 expandtab
autocmd Filetype coffeescript setlocal ts=4 sw=4 sts=0 expandtab
autocmd Filetype jade setlocal ts=4 sw=4 sts=0 expandtab
zobacz: Ustawianie preferencji białych znaków Vima według rodzaju pliku
"
:)
'
powoduje błąd na wszystkich wersjach mojego Linuxa. (7,3+, 8,0 ...)
"
, co oznacza, że nie zamykaj go innym "
. Nie jestem pewien, dlaczego to skomentowałem.
'
ale nie pozostawia "
bez prawej "
@. @
Umieść polecenia autocmd na podstawie sufiksu pliku w ~ / .vimrc
autocmd BufRead,BufNewFile *.c,*.h,*.java set noic cin noexpandtab
autocmd BufRead,BufNewFile *.pl syntax on
Polecenia, których szukasz, to prawdopodobnie ts = i sw =
FileType
?
Zwykle pracuję z expandtab
setem, ale to źle wpływa na makefile. Ostatnio dodałem:
:autocmd FileType make set noexpandtab
do końca mojego pliku .vimrc i rozpoznaje Makefile, makefile i * .mk jako makefile i nie rozwija kart. Prawdopodobnie możesz to przedłużyć.
Osobiście używam tych ustawień w .vimrc:
autocmd FileType python set tabstop=8|set shiftwidth=2|set expandtab
autocmd FileType ruby set tabstop=8|set shiftwidth=2|set expandtab
Może to być znane większości z nas, ale tak czy inaczej (po raz pierwszy byłem zdziwiony): wykonanie :set et
( :set
rozwinięcie kart) nie zmienia kart już istniejących w pliku, trzeba to zrobić :retab
. Na przykład:
:set et
:retab
i zakładki w pliku są zastąpione wystarczającą ilością spacji. Aby przywrócić zakładki, po prostu wykonaj:
:set noet
:retab
Dzisiaj możesz spróbować Editorconfig , jest też plugin vim . Dzięki temu możesz nie tylko zmienić rozmiar wcięcia w vimie, ale w wielu innych edytorach zachowaj spójne style kodowania.
Poniżej znajduje się prosta konfiguracja edytora, jak widać, pliki python będą miały 4 spacje dla wcięć, a pliki szablonów mopsów będą miały tylko 2.
# 4 space indentation for python files
[*.py]
indent_style = space
indent_size = 4
# 2 space indentation for pug templates
[*.pug]
indent_size = 2
Chociaż możesz skonfigurować wcięcie Vima w porządku za pomocą wtyczki wcięcia lub ręcznie za pomocą ustawień, zalecam użycie skryptu python o nazwie Vindect, który automatycznie ustawia odpowiednie ustawienia po otwarciu pliku python. Użyj tej wskazówki, aby korzystanie z Vindect było jeszcze bardziej skuteczne. Kiedy po raz pierwszy rozpocząłem edycję plików Pythona utworzonych przez innych z różnymi stylami wcięć (tabulator a spacja i liczba spacji), było to niezwykle frustrujące. Ale Vindect wraz z tym plikiem wcięcia
Polecam również:
Dla tych autocmd
, którzy używają , najlepszą praktyką jest grupowanie ich razem. Jeśli grupa jest związana z wykrywaniem typu pliku, możesz mieć coś takiego:
augroup filetype_c
autocmd!
:autocmd FileType c setlocal tabstop=2 shiftwidth=2 softtabstop=2 expandtab
:autocmd FileType c nnoremap <buffer> <localleader>c I/*<space><esc><s-a><space>*/<esc>
augroup end
Grupowanie pomaga utrzymać .vimrc
porządek, zwłaszcza gdy z typem pliku skojarzonych jest wiele reguł. W powyższym przykładzie zdefiniowano skrót komentarza specyficzny dla plików .c.
Początkowe wywołanie autocmd!
mówi vimowi, aby usunął wszelkie wcześniej zdefiniowane polecenia automatyczne we wspomnianym grupowaniu. Zapobiegnie to duplikowaniu definicji, jeśli .vimrc
zostanie ponownie pozyskane. Zobacz :help augroup
więcej informacji.
Używam narzędzia, które napisałem w języku C o nazwie autotab
. Analizuje pierwsze kilka tysięcy wierszy załadowanego pliku i określa wartości parametrów Vima shiftwidth
, tabstop
oraz expandtab
.
Kompiluje się to na przykład za pomocą gcc -O autotab.c -o autotab
. Instrukcje integracji z Vimem znajdują się w nagłówku komentarza u góry.
Autotab jest dość sprytny, ale od czasu do czasu może się mylić, w szczególności przez to, że były niekonsekwentnie utrzymywane przy użyciu różnych stylów wcięcia.
Jeśli plik w oczywisty sposób używa tabulacji lub kombinacji tabulatorów i spacji do wcięcia, Autotab ustali, jaki rozmiar tabulacji jest używany, biorąc pod uwagę takie czynniki, jak wyrównanie elementów wewnętrznych wzdłuż kolejnych linii, takie jak komentarze.
Działa w różnych językach programowania i wybacza elementy „poza pasmem”, które nie są zgodne z przyrostami wcięć, takie jak dyrektywy C przetwarzania wstępnego, etykiety instrukcji C, nie wspominając o oczywistych pustych wierszach.