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
Кто-нибудь может подсказать, как это можно сделать?
ОБНОВИТЬ
Спасибо за ответы от слишком большого количества 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 вставляет минимально возможное количество символов табуляции + пробела, которое соответствует 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!
), но мне хотелось бы, чтобы было проще установить ширину вкладки, без необходимости возиться с 3 различными параметрами.
Так что предложенное мной предложение по поводу чего-то вроде :set stab=4
меня все еще звучит хорошо.