Supprimer "tabulation" à espace étendu dans Vim avec une seule touche?

19

Je modifier Python code avec Vim.

Avec la tabclé, quatre espaces sont insérés pour l'indentation. Comment puis-je supprimer ces espaces avec un trait "Retour arrière" (?) - au lieu de quatre?

Il doit y avoir une option "set" pour cela ...

Voici mon .vimrc:

set autoindent
set ts=4
set sw=4
set et
Evgeny
la source

Réponses:

23

Vous pouvez utiliser Ctrl+Dpour sauvegarder un taquet de tabulation. Cela déplace en fait toute la ligne vers le taquet de tabulation gauche; Ctrl+Tfait la même chose à droite. Notez que ces frappes ne fonctionnent qu'en mode Insertion (utilisez <<et >>pour l'équivalent en mode Commande).

Greg Hewgill
la source
30
set softtabstop=4
sf17k
la source
10
OMI, c'est exactement ce que le PO a demandé. Mérite plus de votes positifs.
Ludwig Weinzierl
2
Ceci est la bonne réponse.
mk12
1
Je ne savais pas à ce sujet, et c'était exactement ce que je cherchais. +1
NigoroJr
5

tl; dr: set tabstop=4 softtabstop=-1 shiftwidth=0 expandtab

forme courte: set ts=4 sts=-1 sw=0 et

Explication

Si vous définissez softtabstop(ou sts), -1il se comportera automatiquement de la même manière que tabstop( ts), ce qui vous évitera quelques tracas si vous changez beaucoup de tabulation. La définition de shiftwidth( sw) 0devrait également rendre cela identique tabstop.

En détail

shiftwidth sw

Nombre d'espaces à utiliser pour chaque étape de retrait (automatique). Utilisé pour cindent, >>, <<, etc.
Lorsque zéro , la tabstopvaleur sera utilisée.

tabstop ts

Nombre d'espaces pris en compte par a dans le fichier. Voir aussi : commande retab et softtabstopoption.

softtabstop sts

Nombre d'espaces pris en Tabcompte par a lors de l'exécution d'opérations d'édition, comme l'insertion d'un Tabou l'utilisation BS. On a l' impression que des Tabs sont insérés, alors qu'en fait un mélange d'espaces et de s est utilisé. Ceci est utile pour garder le tabsest à sa mise en valeur standard, tout en étant capable de modifier comme il est réglé sur sts. Lorsque stsest négatif, la valeur de shiftwidthest utilisée. Cela vous évitera quelques tracas si vous changez beaucoup de tabulations. Lorsque expandtabn'est pas défini, le nombre d'espaces est minimisé en utilisant Tabs.

expandtab et

En mode Insertion: utilisez le nombre d'espaces approprié pour insérer un. Les espaces sont utilisés en tirets avec le >et les <commandes et quand autoindentest activé. Pour insérer un véritable onglet lorsqu'il expandtabest activé, utilisez Ctrl- V Tab. Voir aussi : retab

Orwellophile
la source
Bien, j'utilise vim depuis des années mais l'héritage de sts / sw / ts n'a jamais attiré mon attention.
timss
2

J'ai écrit GreedyBackspace.vim pour quelqu'un qui voulait quelque chose comme ça. Je ne l'utilise pas personnellement, donc cela fait un moment que je ne l'ai pas mis à jour. Je n'ai cependant reçu aucun rapport de bogue récemment.

Heptite
la source
1

Plusieurs options:

  1. Vous pouvez «retab» tous les espaces afin qu'ils soient remplacés par des tabulations. De cette façon, ils pourraient être facilement supprimés.
  2. Vous pouvez (ceci n'est pas testé, donc je propose juste des idées ici) créer une fonction qui s'exécute en mode normal 4 fois la touche de retour arrière. Puis mappez-le sur quelque chose. Cependant, il n'a aucun moyen de savoir s'il supprimera des espaces ou des caractères importants, ce qui est potentiellement dangereux.
  3. '4X' supprimera les 4 derniers caractères (c'est un grand X, pas un petit, un petit agira comme la touche Suppr '.
Tour
la source
0

le plus simple est de <<répéter avec un.

vimmer
la source
Bonjour et bienvenue au superutilisateur. Bien que je sois d'accord avec votre réponse étant moi-même un utilisateur vi. Votre réponse est courte, n'explique pas pourquoi vous suggérez ce que vous suggérez et pourquoi vous ne suggérez pas quelque chose qui correspond à la question posée.
Mogget
-1

Avez-vous vérifié à l'aide du paramètre de développement des onglets dans votre VIM?

:set noet

Je préfère généralement garder les onglets tout en travaillant sur les fichiers.
Lorsque cela est nécessaire, je remplace les tabulations par 4 espaces ou autant que nécessaire.

:%s/<ctrl+V><tab>/    /g
                  ----

En petit plus, votre fichier source est plus court de 3 caractères par onglet :-)

nik
la source
oh, j'ai et parce que je dois développer des onglets - je pense - parce que le code que je modifie a été initialement écrit de cette façon. maintenant je suis juste en train de suivre cette convention.
Evgeny
Vous pouvez toujours faire ce que je dis et restaurer les espaces à la fin (lorsque vous devez rendre le fichier au référentiel)
nik
Peut-être pourriez-vous avoir une fonction vim qui les a développés en onglets à l'ouverture et les a réduits en espaces à la fermeture? Quelqu'un a des idées?
sixtyfootersdude
C'est une réponse vraiment inutile - elle rouvre inutilement le débat tabs-vs-espaces, sans fournir réellement d'informations utiles.
Dietrich Epp
-2

Je ne pense pas qu'il y ait un moyen. Une fois que la touche de tabulation est étendue à quatre espaces, vim n'a aucun moyen de savoir qu'ils ont déjà été un onglet.

David Mackintosh
la source
4
-1: Manque d'imagination.
sixtyfootersdude