À quoi sert «softtabstop»?

21

Je connais ces paramètres liés aux onglets dans Vim:

  • ts
  • sw
  • expandtab
  • smarttab
  • sts

Mon réglage normal est set ts=4 sw=4 expandtab smarttab.

Mais selon la stsdocumentation , s'il expandtabn'est pas défini, il essaiera d'utiliser une combinaison d'espaces et de tabulations pour composer le nombre souhaité de blancs pour une taille de tabulation.

Je ne peux pas vraiment penser à un scénario utile pour ce paramètre: pourquoi quelqu'un voudrait-il avoir un nombre fixe d'onglets et d'espaces qui pourraient simplement gâcher les choses? Le seul avantage de faire cela que je puisse penser est de réduire le nombre de caractères et donc de réduire la taille du fichier, ce qui me semble bizarre.

KFL
la source

Réponses:

20

Comme le softtabstopmentionne la documentation, il est utile si vous souhaitez conserver la taille de taquet de tabulation par défaut de 8, mais éditez un fichier comme si la taille de taquet de tabulation était une autre valeur. Par exemple, si vous vouliez un niveau d'indentation de 4 lors de la modification du code, mais que certains commentaires avaient du texte en retrait comme un tableau qui dépendait d'un taquet de tabulation de 8, vous pouvez définir stssur 4.

Une différence que je remarque entre vos paramètres de tabulation ( set ts=4 sw=4 expandtab smarttab) et l'utilisation de sts(par exemple set ts=8 sts=4) est lors du retour en arrière sur des espaces au milieu d'une ligne de texte. Par exemple, considérez la ligne de texte suivante, où ·indique un espace:

some·text·······more·text

En mode insertion, déplacez le curseur juste avant le mof more text. Avec vos paramètres, appuyer sur Retour arrière supprime un seul espace. Mais lors de l'utilisation sts=4, Backspace supprime jusqu'à la tabulation précédente, car il se comporterait si les espaces étaient à la place un caractère de tabulation.

Vous pouvez définir sts=4en plus de vos paramètres et obtenir le comportement de retour arrière médian sans mélanger les tabulations et les espaces. Les tabulations seront étendues à quatre espaces, mais vous pouvez reculer sur une plage d'espaces au milieu d'une ligne.

Lithis
la source
3

Voir l'exemple ci-dessous,

// Start vim without loading your vimrc. set only tabstop=8 softtabstop=4.
// This makes <Tab> in insert mode equals to 4 <Space> length at max.

// In insert mode, type 12, one <Tab>, 5. We get insertion below,
12··5
// Quit insert mode. Move cursor back, we find 2 <Space> inserted.

// In insert mode, type 12, two <Tab>, 9. We get insertion below,
12······9
// Quit insert mode. Move cursor back, you find a <Tab> inserted.

// In insert mode, type 12, three <Tab>, 3. We get insertion below,
12··········3
// Move the cursor back, you find a <Tab> and 4 <Space> inserted.

// We can even set sotftabstop=12, but this time we only need type one <Tab>, then 3.
12··········3
// Move the cursor back, you find a <Tab> and 4 <Sapce> inserted.

Il en tabstopva de même de la largeur Tabdéfinie pour a, tandis que softtabstopde la distance parcourue par le curseur lors de la frappe Tab . Quand ils ne sont pas définis pour avoir la même valeur, cela signifie que si vous appuyez sur la Tabtouche, cela n'implique pas trivialement un Tabcaractère. Dans tous les cas, c'est Vim qui décide une fois que vous quittez le mode insertion. Vim essaiera d'abord de faire correspondre autant tabstopque possible l'insertion ; si enfin il ne peut pas faire un full tabstop, vim compense simplement par Space.

Pour parler un peu plus, si vous définissez expandtab, c'est égal à dire à vim:

S'il vous plaît ne vous embêtez pas à calculer combien Tabet Sapceest nécessaire. Insérez simplement Space.

Chen XI
la source
Votre réponse ressemble plutôt à une diatribe et ne semble pas répondre à la question.
Herb Wolfe
@Herb Wolfe Je souhaite que ma réponse puisse aider PO à comprendre ce qui se passe lorsqu'un réglage inhabituel est effectué :set st=7 sts=13. As vim n'est pas seulement conçu pour le codage, mais à l'origine pour l'édition de texte.
Chen XI
1

Réponse simple:

Par exemple, il est extrêmement utile pour la programmation, en particulier en Python, dans lequel la tabulation est cruciale. Lorsque vous appuyez sur la touche de retour arrière avec sts = 4, la ligne ne sera pas effacée, pas un seul caractère d'espace.

SergeyR
la source