Я прочитал следующие статьи:
- http://vimcasts.org/episodes/tabs-and-spaces/
- https://medium.com/@arisweedler/tab-settings-in-vim-1ea0863c5990
Чтобы попытаться понять, что такое tabstop
, shiftwidth
и softtabstop
означают. Вот что я понял:
tabstop
устанавливает способ отображения вкладки в редакторе vim. Если у вас set ts=4
, то при нажатии клавиши табуляции на клавиатуре будет выглядеть 4 пробела. Если у вас set ts=50
, то при каждом нажатии клавиши Tab это будет выглядеть так, что вы получите 50 пробелов. В случае, если у вас set expandtab
, символы будут 50 пробелами, в противном случае у вас будет только 1 символ табуляции, который выглядит как 50 пробелов (так что всего 1 байт из ASCII?, Немного странно).
shiftwidth
устанавливает размер отступа для таких вещей, как <<
, >>
, ==
, а также для автоматического отступа. Таким образом, это означает, что вы знаете, что если у вас есть set sw=5
и, скажем, ts=4
, то, когда набирается >>
, он помещает в 1 табуляцию и 1 пробел и выполняет некоторую математику как таковую.
softtabstop
Я не уверен в этом. Из того, что я прочитал, источники, похоже, имеют разные объяснения.
Источник 1 говорит:
Если вы предпочитаете работать с символами табуляции, то этохорошая идея, чтобы убедиться, что tabstop == softtabstop. Это снижает вероятность того, что вы получите смесь вкладок и пробелов для отступа.
Если вы предпочитаете работать с пробелами, то лучше убедиться, что softtabstop == shiftwidth. Таким образом, можно ожидать, что будет вставлено одинаковое количество пробелов, независимо от того, нажимаете ли вы клавишу табуляции в режиме вставки или используете команды отступа в обычном / визуальном режимах.
Источник 2 говорит:
softtabstop: упоминается для клавиши табуляции и клавиши возврата. Сколько пробелов нужно вставить при нажатии клавиши табуляции? И сколько пробелов нужно удалить при нажатии клавиши возврата?
Прежде всего, я действительно не знаю, как совместить источник 1 и источник 2. Почему shiftwidth
имеет значение (источник1), если мы делаем это только для клавиши Tab и клавиши Backspace (источник 2). Символ shiftwidth
должен контролировать, сколько места добавляется во время >>
и т. Д., Верно? Почему это имеет значение для пробелов?
«Если вы предпочитаете работать с символами табуляции, то неплохо бы убедиться, что tabstop == softtabstop.»: Этот тип имеет смысл. softtabstop
определяет, сколько места занимает каждое нажатие клавиши Tab, и если между tabstop
и softtabstop
есть разногласия, мы можем использовать пробелы для выравнивания.
Наконец, я пыталсянекоторые примеры из источника 2 внизу. (Обратите внимание, что в моем vimrc есть следующие строки, и только эта строка влияет на пробелы: set tabstop=4 shiftwidth=4 expandtab
)
В новый файл я внес следующие изменения:
:set ts=5 sts=3
:retab
Когда я нажалКлавиша Tab, в отличие от того, что сказал автор статьи 2, я получил 4 пробела, а не 3. Так он сказал что-то не так? Затем я установил shiftwidth
на 3, и СЕЙЧАС я получал 3 пробела, когда нажимал клавишу табуляции (а также когда делал >>
). Я не знаю значение этого. Был ли он неправ?
Основываясь на этих наблюдениях, кто-нибудь может сказать мне, что на самом деле делает sts
? Когда у нас есть символ табуляции независимо от того, что ts
это всегда 1 байт? Влияет ли sw
на нажатие клавиши Tab? Есть ли у меня какое-либо другое недопонимание относительно этих параметров? Вим тяжело.