Vim очень любезен, когда дело доходит до вкладки Vs. космические предпочтения. Насколько я понимаю, настройка tabstop
указывает ширину символа табуляции. Параметр shiftwidth
указывает, сколько столбцов будет увеличиваться / уменьшаться при использовании команд << </kbd> и >> , тогда как параметр softtabstop
влияет на количество пробела, которое будет вставлено, когда Вы нажимаете клавишу Tab в режиме вставки. Если expandtab
включено, клавиша табуляции вставляет softtabstop
количество пробелов. В то время как при выключенном expandtab
нажатие клавиши Tab вводит наименьшее возможное количество символов табуляции + пробела, соответствующее softtabstop
. (Пожалуйста, поправьте меня, если я ошибаюсь.)
Этот последний пункт заставляет меня задуматься: есть ли практический случай, когда вы не хотели бы shiftwidth == tabstop && tabstop == softtabstop
? Я не могу думать об одном. Насколько мне известно, было бы наиболее удобно, если бы я мог установить все 3 из них на одно и то же значение в одном назначении. например вызов:
:set stab=4
что будет эквивалентно выполнению:
:set tabstop=4 softtabstop=4 shiftwidth=4
Кто-нибудь может подсказать, как это можно сделать?
UPDATE
Спасибо за ответы, которые так далеко от слишком много php , hobbs и kaiser.se . Вместо того, чтобы отвечать на каждый вопрос в отдельности, я обновляю вопрос здесь.
Softtabstop с отключенным расширением
Я уже говорил выше, что при отключенной функции расширения вкладки нажатие клавиши Tab вводит наименьшее возможное количество символов табуляции + пробела, соответствующее softtabstop
. Я поддерживаю это, но я думаю, что мне нужно объяснить, что я имел в виду. Я попытаюсь сделать это на нескольких примерах. Чтобы продолжить, запустите :set list
, чтобы увидеть символы табуляции.
tabstop=4 softtabstop=2 shiftwidth=4 noexpandtab
В режиме вставки нажатие клавиши табуляции вставляет 2 пробела. Нажмите клавишу табуляции второй раз, и вместо вставки еще двух пробелов (всего 4 пробела) она заменяет предыдущие 2 пробела одним символом табуляции. Tabstop установлен на 4, поэтому один символ табуляции имеет ту же ширину, что и 4 пробела.
tabstop=4 softtabstop=6 shiftwidth=4 noexpandtab
В режиме вставки нажатие клавиши табуляции вставляет 1 символ табуляции плюс 2 пробела. Ширина символа табуляции равна 4, поэтому общая ширина равна 6, и это достигается с помощью 3 символов. При повторном нажатии клавиши табуляции вставляются два символа табуляции и удаляются два пробела, которые были вставлены ранее. Общая ширина 12, и это достигается с помощью 3 символов.
В обоих этих примерах Vim вставляет минимально возможное количество символов табуляции + пробела, которое соответствует softtabstop.
Если я работаю с отключенной функцией расширения, я не вижу себя желающим получить дополнительный гранулярный контроль, который можно получить, установив для softtabstop значение, отличное от tabstop. Мне все еще было бы полезно иметь возможность установить tabstop
, softtabstop
и shiftwidth
на одно и то же значение с помощью одной команды.
Делает ли expandtab избыточной softtabstop?
tabstop=4 softtabstop=0 shiftwidth=4 expandtab
В режиме вставки нажатие клавиши табуляции вставляет 4 пробела. Нажатие клавиши удаления удаляет один пробел, поэтому вам придется вернуться на 4 раза, если вы случайно нажали клавишу Tab.
tabstop=4 softtabstop=4 shiftwidth=4 expandtab
В режиме вставки нажатие клавиши табуляции вставляет 4 пробела. Нажатие клавиши Backspace удаляет 4 пробела.
Если я работаю с включенным expandtab
, я бы предпочел, чтобы клавиша удаления удаляла столько же пробелов, сколько вставляется клавиша табуляции. Поэтому и в этом случае мне кажется, что было бы полезно иметь возможность назначать одно и то же значение одновременно tabstop
, softtabstop
и shiftwidth
.
Ярлык все равно будет полезен
Здорово, что Vim обеспечивает такую гибкость, но я не вижу в этом необходимости. Я просто хочу иметь возможность выбрать ширину вкладки, и является ли она «жесткой» вкладкой (используя символ табуляции) или «мягкой» вкладкой (состоящей из пробелов). Переключение между жесткими и мягкими вкладками достаточно простое (:set expandtab!
), но мне бы хотелось, чтобы было проще установить ширину вкладки, не прибегая к манипулированию с 3 различными параметрами.
Так что мое предложение о чем-то вроде :set stab=4
все еще звучит хорошо для меня.