Для чего используется `softtabstop`?


21

Я знал об этих настройках вкладок в Vim:

  • ts
  • sw
  • expandtab
  • smarttab
  • sts

Моя нормальная настройка set ts=4 sw=4 expandtab smarttab.

Но согласно stsдокументации , если expandtabона не установлена, она будет пытаться использовать комбинацию пробелов и табуляций, чтобы составить желаемое количество пробелов для размера табуляции.

Я не могу придумать полезного сценария для этого параметра: почему кто-то хочет иметь фиксированное количество вкладок и пробелов, которые могут просто испортить ситуацию? Единственное преимущество, которое я могу придумать, - это уменьшить количество символов и, следовательно, уменьшить размер файла, что мне кажется странным.

Ответы:


20

Как softtabstopупоминается в документации, полезно, если вы хотите оставить размер по умолчанию для табуляции 8, но отредактируйте файл так, как если бы размер табуляции был другим значением. Например, если при редактировании кода вы хотели иметь уровень отступа 4, но в некоторых комментариях был текст с отступом табуляции, например таблица, которая зависела от позиции табуляции 8, вы можете установить stsзначение 4.

Я заметил одно различие между настройками вашей вкладки ( set ts=4 sw=4 expandtab smarttab) и использованием sts(например set ts=8 sts=4), когда отступ в промежутке в середине строки текста. Например, рассмотрим следующую строку текста, где ·указывает пробел:

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

В режиме вставки переместите курсор непосредственно перед mиз more text. При ваших настройках нажатие Backspace удаляет один пробел. Но при использовании sts=4Backspace полностью удаляет предыдущую позицию табуляции, как если бы пробелы были символом табуляции.

Вы можете установить sts=4в дополнение к вашим настройкам и получить режим возврата в середине строки, не смешивая табуляцию и пробелы. Вкладки будут расширены до четырех пробелов, но вы можете вернуться на диапазон пробелов в середине строки.


3

Смотрите пример ниже,

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

Так tabstopчто о том, как широко Tabопределен а, а softtabstopо том, как далеко перемещается курсор при наборе текста Tab . Когда они не установлены на одно и то же значение, это означает, что если вы нажмете Tabклавишу, это не будет означать тривиальный Tabсимвол. В любом случае, именно vim решит, когда вы выйдете из режима вставки. Vim сначала попытается сопоставить вставку tabstopкак можно больше; если, наконец, он не может сделать полный tabstop, vim просто компенсирует Space.

Если говорить немного больше, если вы установите expandtab, это будет равно vim:

Пожалуйста, не удосуживайтесь подсчитать, сколько Tabи сколько Sapceнужно. Просто вставьте Space.


Ваш ответ выглядит скорее как напыщенная речь, и, кажется, не отвечает на вопрос.
Херб Вулф

@ Herb Wolfe Я хотел бы, чтобы мой ответ помог ПО выяснить, что происходит, когда создаются необычные настройки :set st=7 sts=13. Поскольку vim предназначен не только для кодирования, но и для редактирования текста.
Чэнь

1

Простой ответ:

Например, это чрезвычайно полезно для программирования, особенно в Python, в котором табуляция имеет решающее значение. Когда вы нажмете клавишу Backspace с sts = 4, она будет разметить строку, а не удалить один символ пробела.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.