Для чого використовується `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 спробує відповідати вставці стільки, tabstopскільки зможе; якщо нарешті він не може зробити повне tabstop, vim просто компенсується Space.

Якщо говорити трохи більше, якщо ви встановите expandtab, це рівно, щоб сказати vim:

Будь ласка, не поспішайте підраховувати, скільки Tabі Sapceпотрібно. Просто вставте Space.


Ваша відповідь, скоріше, нагадує сказу, і не здається, щоб відповісти на запитання.
Герб Вулф

@Herb Wolfe Я хотів би, щоб моя відповідь могла допомогти PO зрозуміти, що відбувається, коли робиться незвичайне налаштування :set st=7 sts=13. Оскільки vim призначений не тільки для кодування, але і спочатку для редагування тексту.
Чень XI

1

Проста відповідь:

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.