web-dev-qa-db-fra.com

Comment insérer un caractère de tabulation lorsque l'option expandtab est activée dans VIM

Lorsque je suis en mode INSERT et que l'option expandtab est activée, appuyer sur la touche permet d'insérer le nombre d'espaces configuré.

Mais parfois, je veux insérer le caractère de tabulation lui-même.

Sais-tu comment faire cela?

330
devemouse

Vous pouvez utiliser <CTRL-V><Tab> en "mode insertion". En mode insertion, <CTRL-V> insère une copie littérale de votre prochain caractère.

Si vous avez besoin de le faire souvent, @ Dee`Kej a suggéré (dans les commentaires) Shift+Tab insérer un véritable onglet par

:inoremap <S-Tab> <C-V><Tab>

De plus, comme indiqué par @feedbackloop, sous Windows, vous devrez peut-être appuyer sur <CTRL-Q> plutôt que sur <CTRL-V>.

485
Michael Anderson

Vous pouvez désactiver l'option expandtab à partir de Vim comme ci-dessous:

:set expandtab!

ou

:set noet

PS: Et le redéfinir lorsque vous avez terminé d'insérer un onglet, avec "set expandtab" ou "set et"

PS: Si vous avez un jeu d'onglets équivalent à 4 espaces dans .vimrc (softtabstop), vous voudrez peut-être aussi le définir sur 8 espaces pour pouvoir insérer un onglet en appuyant une fois sur la touche de tabulation de deux fois (set softtabstop = 8).

29
Jahanzeb Farooq

De la documentation sur expandtab :

Pour insérer un onglet réel lorsque expandtab est activé, utilisez CTRL-V _<Tab>_. Voir aussi :retab et ins-expandtab .
Cette option est réinitialisée lorsque l'option paste est définie et restaurée lorsque l'option paste option est réinitialisée.

Donc, si vous avez un mappage pour basculer l’option paste, par ex.

_set pastetoggle=<F2>
_

vous pouvez aussi faire _<F2>Tab<F2>_.

2
Eugene Yarmash