Touche de tabulation = = 4 espaces et auto-indentation après lacets bouclés en Vim

Comment faire vi - Vim ne jamais utiliser les onglets (convertir les espaces en tabulations, mauvais!), rend la touche tab = = 4 espaces, et indente automatiquement le code après les blocs de maintien bouclés comme Emacs does?

Comment puis-je sauvegarder ces paramètres pour ne plus jamais avoir à les entrer?

j'ai vu d'autres questions liées à cela, mais il semble toujours être un peu hors de ce que je veux.

1078
demandé sur Peter Mortensen 2008-10-24 21:41:47

9 réponses

comme il a été souligné dans quelques réponses ci-dessous, la méthode préférée n'est pas maintenant d'utiliser smartindent, mais plutôt d'utiliser ce qui suit (dans votre .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

Dans votre .vimrc: fichier:

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

les fichiers d'aide prennent un peu de temps à s'habituer, mais plus vous lisez, mieux Vim obtient:

:help smartindent

encore mieux, vous pouvez intégrer ces paramètres dans votre source pour la portabilité:

:help auto-setting

pour voir vos paramètres actuels:

:set all

comme graywh souligne dans les commentaires, smartindent a été remplacé par cindent qui "fonctionne plus habilement", bien que toujours principalement pour les langues avec une syntaxe de type C:

:help C-indenting

1614
répondu Ken 2017-05-23 12:26:36

Lié, si vous ouvrez un fichier qui utilise à la fois des onglets et des espaces, en supposant que vous avez

set expandtab ts=4 sw=4 ai

vous pouvez remplacer tous les onglets par des espaces dans le fichier entier avec

:%retab
204
répondu netjeff 2014-02-28 21:03:43

la meilleure façon d'obtenir une indentation spécifique à un type de fichier est d'utiliser filetype plugin indent on dans votre vimrc. Ensuite, vous pouvez spécifier des choses comme set sw=4 sts=4 et .vim / ftplugin/C. vim, par exemple, sans avoir à rendre celles-ci globales pour tous les fichiers en cours d'édition et autres syntaxes de type non-C seront indentées correctement, aussi (même lisps) .

83
répondu graywh 2012-09-27 12:30:11

pour avoir des onglets à 4 Espaces Dans la plupart des fichiers, un vrai char à 8 Espaces Dans les Makefiles, et une indentation automatique dans divers fichiers, y compris C/C++, mettez ceci dans votre fichier ~/.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
répondu Shervin Emami 2014-01-24 02:42:33

sur de nombreux systèmes Linux, comme Ubuntu, le fichier .vimrc n'existe pas par défaut, il est donc recommandé de le créer en premier.

N'utilisez pas le fichier .viminfo qui existe dans le répertoire home. Il est utilisé à des fins différentes.

Étape 1: Aller à votre répertoire personnel

cd ~

Étape 2: Créer le fichier

vim .vimrc

Étape 3: Ajouter la configuration indiquée ci - dessus

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

Étape 3: Enregistrer le fichier, en appuyant sur Shift + ZZ .

41
répondu Erick 2018-05-31 04:14:55

la méthode recommandée est d'utiliser l'indentation basée sur le type de fichier et d'utiliser smartindent et cindent seulement si cela ne suffit pas.

ajoutez ce qui suit à votre .vimrc

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

j'Espère que ça aide comme étant une réponse différente.

28
répondu Chaudhry Junaid 2014-05-02 10:35:06

éditez votre~/.vimrc

$ vim ~/.vimrc

ajouter les lignes suivantes:

set tabstop=4
set shiftwidth=4
set softtabstop=4
set expandtab
10
répondu Yusuf Ibrahim 2016-07-15 16:04:08

From the VIM wiki :

:set tabstop=4
:set shiftwidth=4
:set expandtab
9
répondu User 2015-11-18 19:08:54

le tiret automatique est basé sur le mode de syntaxe courante. Je le sais si tu montes Foo.java, puis entrer un { et frapper entrer indente la ligne suivante.

comme pour les onglets, il y a deux réglages. Dans Vim, tapez deux points et ensuite "set tabstop=4" qui définira les onglets à afficher comme quatre espaces. Appuyez à nouveau sur deux points et tapez "set expandtab" qui insérera des espaces pour les onglets.

Vous pouvez mettre ces les paramètres de dans un .vimrc (ou _vimrc sous Windows) dans votre répertoire personnel, vous n'avez donc qu'à les taper une seule fois.

7
répondu Joey Gibson 2015-02-01 15:45:26