Para que é utilizado o 'softtabstop`?

21

Eu conheço essas configurações relacionadas à guia no Vim:

  • ts
  • sw
  • expandtab
  • smarttab
  • sts

Minha configuração normal é set ts=4 sw=4 expandtab smarttab.

Mas, de acordo com a stsdocumentação , se expandtabnão estiver definido, ele tentará usar uma combinação de espaços e guias para compensar o número desejado de espaços em branco para um tamanho de guia.

Não consigo pensar em um cenário útil para essa configuração: por que alguém deseja ter um número fixo de guias e espaços que podem atrapalhar as coisas? A única vantagem de fazer isso em que consigo pensar é reduzir o número de caracteres e, assim, reduzir o tamanho do arquivo, o que me parece estranho.

KFL
fonte

Respostas:

20

Como a softtabstopdocumentação menciona, é útil se você deseja manter o tamanho padrão de tabulação de 8, mas edite um arquivo como se o tamanho da tabulação tivesse algum outro valor. Por exemplo, se você quisesse um nível de recuo 4 ao editar o código, mas alguns comentários tivessem texto com recuo de tabulação, como uma tabela que dependia de uma parada de tabulação de 8, você poderia definir stscomo 4.

Uma diferença que noto entre as configurações da sua guia ( set ts=4 sw=4 expandtab smarttab) e o uso de sts(por exemplo set ts=8 sts=4) ocorre ao retroceder nos espaços no meio de uma linha de texto. Por exemplo, considere a seguinte linha de texto, onde ·indica um espaço:

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

No modo de inserção, mova o cursor imediatamente antes mde more text. Com suas configurações, pressionar Backspace exclui um único espaço. Porém, ao usar sts=4, o Backspace exclui todo o caminho até a parada anterior da tabulação, pois se comportaria se os espaços fossem um caractere de tabulação.

Você pode definir sts=4além das suas configurações e obter o comportamento do backspace da linha intermediária sem misturar guias e espaços. As guias serão expandidas para quatro espaços, mas você pode retroceder em um intervalo de espaços no meio de uma linha.

Lithis
fonte
3

Veja o exemplo abaixo,

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

O mesmo tabstopocorre com a largura Tabdefinida por um, enquanto softtabstopa distância com que o cursor se move durante a digitação Tab . Quando eles não estão definidos para o mesmo valor, significa que, se você pressionar a Tabtecla, isso não implica trivialmente um Tabcaractere. Em qualquer caso, é o vim quem decide quando você sai do modo de inserção. O Vim primeiro tentará corresponder à inserção o maior número tabstoppossível; se, por fim, não puder ser preenchido tabstop, o vim simplesmente compensa Space.

Para falar um pouco mais, se você definir expandtab, é igual a dizer ao vim:

Por favor, não se preocupe em calcular quantos Tabe Sapceé necessário. Basta inserir Space.

Chen XI
fonte
Sua resposta parece um discurso retórico e não parece responder à pergunta.
Herb Wolfe
@Herb Wolfe Desejo que minha resposta possa ajudar a PO a descobrir o que acontece quando é feita uma configuração incomum :set st=7 sts=13. O vim não foi projetado apenas para codificação, mas originalmente para edição de texto.
Chen XI
1

Resposta simples:

Por exemplo, é extremamente útil para programação, especialmente em Python, em que a tabulação é crucial. Quando você pressiona backspace com sts = 4, ela desmarca a linha, não exclui um único caractere de espaço.

SergeyR
fonte