Vim очень удобен, когда речь идет о вкладке Vs. космических предпочтений. Как я понимаю, параметр tabstop
указывает ширину символа табуляции. Параметр shiftwidth
указывает, сколько столбцов нужно увеличивать/уменьшать при использовании команд << и >>, тогда как параметр softtabstop
влияет на количество вставленных пробелов, когда вы нажимаете клавишу Tab в режиме вставки, Если expandtab
включен, клавиша табуляции вставляет softtabstop
количество пробелов. Если при выключенном expandtab
нажатие клавиши Tab вставляет наименьшее возможное количество символов табуляции + пробел, которые соответствуют softtabstop
. (Пожалуйста, поправьте меня, если я ошибаюсь.)
Этот последний момент заставляет задуматься: есть ли практический случай, когда вы не хотели бы shiftwidth == tabstop && tabstop == softtabstop
? Я не могу думать об этом. Насколько мне известно, было бы очень удобно, если бы я мог установить все три из них на одно значение в одном назначении. например вызов:
:set stab=4
который будет эквивалентен запуску:
:set tabstop=4 softtabstop=4 shiftwidth=4
Кто-нибудь может предложить, как это можно сделать?
UPDATE
Спасибо за ответы до сих пор от слишком много php, hobbs и kaiser.se. Вместо ответа на каждый вопрос, я обновляю вопрос здесь.
Softtabstop с отключенным expandtab
Я сказал выше, что с отключением expandtab нажатие клавиши 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 вставляет минимально возможное количество символов tab + пробела, которое соответствует softtabstop.
Если я работаю с отключением expandtab, я не вижу, что хочу получить дополнительный гранулярный контроль, который может быть достигнут путем установки softtabstop в другое значение из tabstop. Мне все же было бы полезно установить tabstop
, softtabstop
и shiftwidth
на одно значение с помощью одной команды.
Разве expandtab делает softtabstop избыточным?
tabstop=4 softtabstop=0 shiftwidth=4 expandtab
В режиме вставки нажатие клавиши вкладок вставляет 4 пробела. Нажатие клавиши "Удалить" удаляет одно пробел, поэтому вам нужно выполнить обратное прохождение 4 раза, если случайно нажмете клавишу вкладки.
tabstop=4 softtabstop=4 shiftwidth=4 expandtab
В режиме вставки нажатие клавиши вкладок вставляет 4 пробела. Нажатие клавиши backspace удаляет 4 пробела.
Если я работаю с expandtab
включен, я бы предпочел, чтобы клавиша удаления удаляла ту же сумму пробелов, что и вкладка. Поэтому в этом случае я также чувствую, что было бы полезно иметь возможность одновременно назначать те же значения tabstop
, softtabstop
и shiftwidth
.
Ярлык будет полезен
Замечательно, что Vim обеспечивает такую гибкость, но я не вижу, что мне это нужно. Я просто хочу иметь возможность выбирать ширину вкладки и является ли она "жесткой" вкладкой (с использованием символа табуляции) или "мягкой" вкладкой (состоящей из пробелов). Переключение между жесткими и мягкими вкладками достаточно просто (:set expandtab!
), но мне жаль, что было бы проще установить ширину вкладки, не выполняя три разных параметра.
Итак, мое предлагаемое предложение для чего-то вроде :set stab=4
все еще звучит хорошо для меня.