Klawisz Tab = = 4 spacje i automatyczne wcięcia po nawiasach klamrowych w Vimie

Jak zrobić vi-Vim nigdy nie używaj tabulatorów (konwersja spacji na tabulatory, źle!), sprawia, że klawisz tab = = 4 spacje i automatycznie wciska kod po blokach nawiasów klamrowych, takich jak Emacs robi?

Również, jak zapisać te ustawienia, aby nigdy nie musiał wprowadzać ich ponownie?

Widziałem inne pytania związane z tym, ale zawsze wydaje się być trochę od tego, co chcę.

Author: Peter Mortensen, 2008-10-24

9 answers

Jak już wspomniano w kilku odpowiedziach poniżej, preferowaną metodą nie jest teraz używanie smartindent, ale zamiast tego użyj następującego (w swoim .vimrc):

filetype plugin indent on
" show existing tab with 4 spaces width
set tabstop=4
" when indenting with '>', use 4 spaces width
set shiftwidth=4
" On pressing tab, insert 4 spaces
set expandtab

W Twoim .vimrc: file:

set smartindent
set tabstop=4
set shiftwidth=4
set expandtab

Pliki pomocy zajmują trochę czasu, aby się przyzwyczaić, ale im więcej czytasz, tym lepszy jest Vim:

:help smartindent

Jeszcze lepiej, możesz osadzić te ustawienia w źródle dla przenośności:

:help auto-setting

Aby zobaczyć swój obecny ustawienia:

:set all

Jak zauważa w komentarzach graywh, smartindent został zastąpiony przez cindent, który "działa sprytniej", chociaż nadal głównie dla języków ze składnią podobną do C:

:help C-indenting

 1614
Author: Ken,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:26:36

Powiązane, jeśli otworzysz plik, który używa zarówno tabulatorów, jak i spacji, zakładając, że masz

set expandtab ts=4 sw=4 ai

Możesz zastąpić wszystkie tabulatory spacjami w całym pliku

:%retab
 204
Author: netjeff,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-28 21:03:43

Najlepszym sposobem uzyskania wcięć specyficznych dla typu pliku jest użycie filetype plugin indent on w Twoim vimrc. Następnie możesz określić takie rzeczy jak set sw=4 sts=4 et in .na przykład vim/ftplugin / c.vim, bez konieczności tworzenia globalnych dla wszystkich edytowanych plików, a inne składnie Nie-Typu C również zostaną poprawnie wcięte (nawet lispy).

 83
Author: graywh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-27 12:30:11

Aby mieć 4-spacyjne zakładki w większości plików, prawdziwy 8-szeroki znak tabulacji w plikach Makefiles i automatyczne wcięcia w różnych plikach, w tym w C / C++, umieść to w pliku ~/.vimrc:

" Only do this part when compiled with support for autocommands.
if has("autocmd")
    " Use filetype detection and file-based automatic indenting.
    filetype plugin indent on

    " Use actual tab chars in Makefiles.
    autocmd FileType make set tabstop=8 shiftwidth=8 softtabstop=0 noexpandtab
endif

" For everything else, use a tab width of 4 space chars.
set tabstop=4       " The width of a TAB is set to 4.
                    " Still it is a \t. It is just that
                    " Vim will interpret it to be having
                    " a width of 4.
set shiftwidth=4    " Indents will have a width of 4.
set softtabstop=4   " Sets the number of columns for a TAB.
set expandtab       " Expand TABs to spaces.
 43
Author: Shervin Emami,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-01-24 02:42:33

W wielu systemach Linux, takich jak Ubuntu, plik .vimrc nie istnieje domyślnie, dlatego zaleca się, aby najpierw go utworzyć.

Nie używaj pliku .viminfo, który istnieje w katalogu domowym. Służy do innego celu.

Krok 1: Przejdź do katalogu domowego

cd ~

Krok 2: Utwórz plik

vim .vimrc

Krok 3: Dodaj konfigurację podaną powyżej

filetype plugin indent on
set tabstop=4
set shiftwidth=4
set expandtab

Krok 3: Zapisz plik, naciskając Shift + ZZ .

 41
Author: Erick,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-31 04:14:55

Zalecanym sposobem jest użycie wcięć opartych na typach plików i używanie smartindent i cindent tylko wtedy, gdy to nie wystarczy.

Dodaj do swojego .vimrc

set expandtab
set shiftwidth=2
set softtabstop=2
filetype plugin indent on

Mam nadzieję, że to pomoże jako inna odpowiedź.

 28
Author: Chaudhry Junaid,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-02 10:35:06

Edytuj swoje ~/.vimrc

$ vim ~/.vimrc

Dodaj następujące wiersze:

set tabstop=4
set shiftwidth=4
set softtabstop=4
set expandtab
 10
Author: Yusuf Ibrahim,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-15 16:04:08

Z vim wiki :

:set tabstop=4
:set shiftwidth=4
:set expandtab
 9
Author: User,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-18 19:08:54

Automatyczne wcięcie jest oparte na bieżącym trybie składni. Wiem, że jeśli edytujesz Foo.java, a następnie wpisanie { i naciśnięcie Enter wcięć w poniższej linii.

Jeśli chodzi o karty, są dwa ustawienia. W Vimie wpisz dwukropek, a następnie "set tabstop=4", który ustawi tabulatory jako cztery spacje. Naciśnij ponownie dwukropek i wpisz "set expandtab", który wstawia spacje dla tabulatorów.

Możesz umieścić te ustawienia wvimrc (lub _vimrc w systemie Windows) w Twoim domu katalog, więc wystarczy wpisać je tylko raz.

 7
Author: Joey Gibson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-02-01 15:45:26