web-dev-qa-db-fra.com

Touche Tab == 4 espaces et mise en retrait automatique après les accolades dans Vim

Comment faire vi - Vim ne jamais utiliser d'onglets (conversion d'espaces en onglets, mauvais!), Rend la touche de tabulation == 4 espaces et indente automatiquement le code après l'accolade des blocs comme Emacs fait?

Comment puis-je enregistrer ces paramètres afin de ne jamais avoir à les saisir à nouveau?

J'ai vu d'autres questions liées à cela, mais cela semble toujours un peu différent de ce que je veux.

1196
mmcdole

Comme il a été souligné dans quelques réponses ci-dessous, la méthode recommandée consiste maintenant à NE PAS utiliser smartindent, mais plutôt à 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 mettent un peu de temps à s'habituer à, mais plus vous lisez, plus Vim obtient:

:help smartindent

Mieux encore, 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 le souligne dans les commentaires, smartindent a été remplacé par cindent qui "fonctionne plus intelligemment", bien que cela reste principalement pour les langages avec une syntaxe de type C:

:help C-indenting
1777
Ken

En rapport, si vous ouvrez un fichier qui utilise des onglets et des espaces, en supposant que vous ayez

set expandtab ts=4 sw=4 ai

Vous pouvez remplacer tous les onglets par des espaces dans tout le fichier avec

:%retab
226
netjeff

Le meilleur moyen d'obtenir une indentation spécifique à un type de fichier est d'utiliser filetype plugin indent on dans votre vimrc. Vous pouvez ensuite spécifier des éléments tels que set sw=4 sts=4 et dans .vim/ftplugin/c.vim, par exemple, sans avoir à les rendre globaux pour tous les fichiers en cours de modification et les autres syntaxes de type non C seront également indentées correctement - (même lisps).

87
graywh

Pour avoir des onglets à 4 espaces dans la plupart des fichiers, un caractère de 8 onglets dans Makefiles et une mise en retrait automatique dans divers fichiers, y compris C/C++, placez 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.
54
Shervin Emami

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 au préalable.

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

Étape 1: Accédez à votre répertoire personnel

cd ~

Étape 2: créer le fichier

vim .vimrc

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

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

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

51
Erick

La méthode recommandée consiste à utiliser une indentation basée sur un type de fichier et à utiliser uniquement smartindent et cindent si cela ne suffit pas.

Ajouter ce qui suit à votre .vimrc

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

J'espère que ça aide car c'est une réponse différente.

29
Chaudhry Junaid

éditez votre ~/.vimrc

$ vim ~/.vimrc

ajoutez les lignes suivantes:

set tabstop=4
set shiftwidth=4
set softtabstop=4
set expandtab
11
Yusuf Ibrahim

Depuis le wiki VIM :

:set tabstop=4
:set shiftwidth=4
:set expandtab
10
User

L'indentation automatique est basée sur le mode de syntaxe actuel. Je sais que si vous éditez Foo.Java, entrez ensuite un { et tapez Enter indente la ligne suivante.

En ce qui concerne les onglets, il y a deux paramètres. Dans Vim, tapez deux points, puis "set tabstop = 4" pour que les onglets s'affichent sous la forme de quatre espaces. Hit deux fois à nouveau et tapez "set expandtab" qui insérera des espaces pour les onglets.

Vous pouvez mettre ces paramètres dans un fichier .vimrc (ou _vimrc sous Windows) de votre répertoire personnel. Vous ne devez donc les saisir qu'une seule fois.

6
Joey Gibson