Jak sprawić, by vi - Vim nigdy nie używał tabulatorów (przekształcanie spacji w tabulatory, źle!), Sprawia, że klawisz tab == 4 spacje i automatycznie wcina kod po blokach nawiasów klamrowych, jak robi to Emacs ?
Jak zapisać te ustawienia, aby nigdy więcej ich nie wprowadzać?
Widziałem inne pytania z tym związane, ale zawsze wydaje się, że jest to trochę poza tym, czego chcę.
vim
whitespace
indentation
vi
auto-indent
mmcdole
źródło
źródło
Odpowiedzi:
Jak wskazano w kilku odpowiedziach poniżej, preferowaną metodą NIE jest teraz użycie smartindent, ale zamiast tego należy użyć (w .vimrc ):
W twoim pliku .vimrc :Pliki pomocy potrzebują trochę czasu, aby się przyzwyczaić, ale im więcej czytasz, tym lepszy jest Vim:
Co więcej, możesz osadzić te ustawienia w swoim źródle dla przenośności:
Aby zobaczyć bieżące ustawienia:
Jak graywh wskazuje w komentarzach, smartindent został zastąpiony przez cindent, który „działa sprytniej”, choć nadal głównie dla języków o składni podobnej do C:
źródło
Powiązane, jeśli otworzysz plik, który używa zarówno tabulatorów, jak i spacji, zakładając, że masz
Możesz zastąpić wszystkie zakładki spacjami w całym pliku za pomocą
źródło
Najlepszym sposobem na uzyskanie wcięcia specyficznego dla rodzaju pliku jest użycie
filetype plugin indent on
w vimrc. Następnie możesz określić takie rzeczy, jakset sw=4 sts=4 et
na przykład .vim / ftplugin / c.vim, bez konieczności tworzenia globalnych dla wszystkich edytowanych plików, a inne składnie typu innego niż C również będą poprawnie wcięte (nawet lisps) .źródło
Aby mieć tabulatory 4 spacji w większości plików, prawdziwy 8-znakowy tabulator w Makefiles i automatyczne wcięcia w różnych plikach, w tym C / C ++, umieść to w swoim
~/.vimrc
pliku:źródło
else
? Wydaje mi się, że ostatnie wiersze nadpisują specyfikę makefile we wszystkich przypadkachW wielu systemach Linux, takich jak Ubuntu,
.vimrc
plik nie istnieje domyślnie, dlatego zaleca się, aby najpierw go utworzyć.Nie używaj
.viminfo
pliku, który istnieje w katalogu domowym. Jest używany do innego celu.Krok 1: Przejdź do katalogu domowego
cd ~
Krok 2: Utwórz plik
vim .vimrc
Krok 3: Dodaj konfigurację określoną powyżej
Krok 3: Zapisz plik, naciskając Shift+ ZZ.
źródło
Shift + ZZ
go spowoduje utworzenie pliku .swp. użyćwq
.Ctrl-Z
to inna historia ...)vim -n <file>
. Plik wymiany nie jest generowany w czasie oszczędzania; to prawie nie spełni swojego celu, ponieważ pliki wymiany stają się przydatne w odzyskiwaniu nagle przerwanych sesji edycji.Zalecanym sposobem jest użycie wcięcia opartego na typie pliku i użycie smartindent i cindent tylko wtedy, gdy to nie wystarczy.
Dodaj następujące elementy do pliku .vimrc
Mam nadzieję, że to pomaga jako inna odpowiedź.
źródło
edytuj ~ / .vimrc
dodaj następujące linie:
źródło
Z wiki VIM :
źródło
Automatyczne wcięcie jest oparte na bieżącym trybie składni. Wiem, że jeśli edytujesz Foo.java, to wpisując
{
i wciskając Enterwcięcia, następuje następujący wiersz.Jeśli chodzi o zakładki, istnieją dwa ustawienia. W Vimie wpisz dwukropek, a następnie „set tabstop = 4”, co spowoduje, że tabulatory będą wyświetlane jako cztery spacje. Naciśnij ponownie dwukropek i wpisz „set expandtab”, który wstawi spacje dla tabulatorów.
Możesz umieścić te ustawienia w .vimrc (lub _vimrc w systemie Windows) w swoim katalogu domowym, więc musisz je wpisać tylko raz.
źródło
Po pierwsze, nie używaj Tabklucza w Vimie do ręcznego wcięcia. Vim ma parę poleceń w trybie wstawiania do ręcznego zwiększania lub zmniejszania wcięcia. Te polecenia to Ctrl-Ti Ctrl-D. Polecenia te przestrzegać wartości
tabstop
,shiftwidth
aexpandtab
, i utrzymywać właściwą mieszaninę przestrzeni i zakładek (maksymalna liczba zakładek następuje dowolny niezbędną liczbę spacji).Po drugie, te ręczne klucze wcięcia nie muszą być i tak bardzo używane, jeśli używasz automatycznego wcięcia.
Jeśli Ctrl-Tzamiast TabCi przeszkadzać, możesz to zmienić:
Możesz także wykonać remap, Shift-Tababy wykonać Ctrl-Ddeindent:
^ T i ^ D to dosłowne znaki sterujące, które można wstawić jako Ctrl-VCtrl-T.
Po wprowadzeniu tego odwzorowania nadal możesz wpisać dosłowny Tab w buforze za pomocą Ctrl-VTab. Pamiętaj, że jeśli to zrobisz, nawet jeśli
:set expandtab
jest włączony, otrzymasz nierozwinięty znak tabulacji.Podobny efekt do
<Tab>
mapy uzyskuje się przy użyciu:set smarttab
, co również powoduje, że backspace na początku linii zachowuje się elegancko.W
smarttab
trybie, gdy nie Tabjest używany na początku linii, nie ma specjalnego znaczenia. To różni się od mojego powyższego mapowania Tabna Ctrl-T, ponieważCtrl-T użyte gdziekolwiek w linii (w trybie wstawiania) zwiększy wcięcie tej linii.Inne przydatne mapowania mogą być:
Teraz możemy robić rzeczy takie jak zaznaczanie niektórych linii i naciskać, Tababy je wciąć. Lub naciśnij Tabdwukrotnie linię (w trybie komend), aby zwiększyć wcięcie.
Jeśli używasz odpowiednich poleceń zarządzania wcięcia, to wszystko jest kontrolowane przez trzy parametry:
shiftwidth
,tabstop
iexpandtab
.Ten
shiftwidth
parametr kontroluje rozmiar wcięcia; jeśli chcesz cztery wcięcia spacji, użyj:set shiftwidth=4
lub skrót:set sw=4
.Jeśli tylko to zostanie zrobione, wcięcie zostanie utworzone przy użyciu kombinacji spacji i tabulatorów, ponieważ
noexpandtab
jest to ustawienie domyślne. Posługiwać się:set expandtab
. Powoduje to, że znaki tabulacji, które wpisujesz do bufora, rozszerzają się w spacje, a wcięcia zarządzane przez Vima używają tylko spacji.Kiedy
expandtab
jest włączony i jeśli zarządzasz swoim wcięciem poprzez wszystkie odpowiednie mechanizmy Vima, wartość parametrutabstop
staje się nieistotna. Kontroluje wygląd zakładek, jeśli zdarzają się one w pliku. Jeśli masz,set tabstop=8 expandtab
a następnie podkradniesz twardy plik do pliku za pomocą Ctrl-VTab, spowoduje to wyrównanie do następnej 8-kolumnowej pozycji tabulacji, jak zwykle.źródło
<C-t>
może używać tej składni zamiast literałów. Wreszcie, mapowanie<Tab>
w trybie normalnym również będzie mapowane<C-i>
(są to ta sama postać), więc nie polecam tego (tracisz