Wofür wird Softtabstop verwendet?

21

Ich kenne die folgenden Einstellungen für Registerkarten in Vim:

  • ts
  • sw
  • expandtab
  • smarttab
  • sts

Meine normale Einstellung ist set ts=4 sw=4 expandtab smarttab.

Wenn dies jedoch nicht festgelegt ist, wird laut stsDokumentationexpandtab versucht, eine Kombination aus Leerzeichen und Tabulatoren zu verwenden, um die gewünschte Anzahl von Leerzeichen für eine Tabulatorengröße zu bilden.

Ich kann mir kein nützliches Szenario für diese Einstellung vorstellen: Warum sollte jemand eine feste Anzahl von Tabulatoren und Leerzeichen haben wollen, die die Dinge möglicherweise nur durcheinander bringen? Der einzige Vorteil, den ich mir dabei vorstellen kann, ist die Reduzierung der Anzahl der Zeichen und damit der Dateigröße, was mir komisch vorkommt.

KFL
quelle

Antworten:

20

Wie in der softtabstopDokumentation erwähnt, ist es hilfreich, wenn Sie die Standardgröße für Tabstopps von 8 beibehalten, eine Datei jedoch so bearbeiten möchten, als ob die Tabstoppgröße ein anderer Wert wäre. Wenn Sie beispielsweise beim Bearbeiten von Code eine Einrückungsstufe von 4 wünschen, einige Kommentare jedoch Text mit Tabulatoreinzügen enthalten sts, z 4.

Ein Unterschied, den ich zwischen Ihren Tabulatoreinstellungen ( set ts=4 sw=4 expandtab smarttab) und der Verwendung von sts(z. B. set ts=8 sts=4) bemerke, ist das Zurücksetzen über Leerzeichen in der Mitte einer Textzeile. Betrachten Sie beispielsweise die folgende Textzeile, in der ·ein Leerzeichen angegeben ist:

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

Bewegen Sie im Einfügemodus den Cursor kurz vor das mvon more text. Wenn Sie bei Ihren Einstellungen die Rücktaste drücken, wird ein einzelnes Leerzeichen gelöscht. Bei Verwendung von sts=4löscht die Rücktaste den gesamten Weg zum vorherigen Tabulator, so wie es sich verhalten würde, wenn die Leerzeichen stattdessen ein Tabulatorzeichen wären.

Sie können sts=4zusätzlich zu Ihren Einstellungen das Backspace-Verhalten in der Mitte festlegen, ohne Tabulatoren und Leerzeichen zu mischen. Tabulatoren werden auf vier Leerzeichen erweitert, Sie können jedoch eine Reihe von Leerzeichen in der Mitte einer Zeile mit der Rücktaste markieren.

Lithis
quelle
3

Siehe das Beispiel unten,

// 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.

Es geht also tabstopdarum, wie breit a Tabdefiniert ist, und softtabstopdarum, wie weit sich der Cursor beim Tippen bewegt Tab. Wenn sie nicht auf den gleichen Wert eingestellt sind, bedeutet dies, dass ein TabTastendruck kein triviales TabZeichen impliziert . In jedem Fall ist es vim, der entscheidet, sobald Sie den Einfügemodus verlassen. Vim wird zunächst versuchen, die Einfügung so oft tabstopwie möglich zuzuordnen. wenn es endlich nicht voll werden kann tabstop, gleicht vim einfach durch aus Space.

Um ein bisschen mehr expandtabzu sagen , wenn Sie festlegen , ist es gleichbedeutend damit, vim zu sagen:

Bitte kalkulieren Sie nicht, wie viele Tabund wie viel Sapcebenötigt werden. Einfach einstecken Space.

Chen XI
quelle
Ihre Antwort scheint eher ein Scherz zu sein und scheint die Frage nicht zu beantworten.
Herb Wolfe
@Herb Wolfe Ich wünschte, meine Antwort kann PO dabei helfen, herauszufinden, was passiert, wenn ungewöhnliche Einstellungen vorgenommen werden :set st=7 sts=13. Denn vim ist nicht nur für das Codieren gedacht, sondern ursprünglich für die Textbearbeitung.
Chen XI
1

Einfache antwort:

Zum Beispiel ist es äußerst nützlich für die Programmierung, insbesondere in Python, wo die Tabellierung von entscheidender Bedeutung ist. Wenn Sie die Rücktaste mit sts = 4 drücken, wird der Tabulator in der Zeile entfernt und kein einzelnes Leerzeichen gelöscht.

SergeyR
quelle