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
меня все еще звучит хорошо.
источник
is there a practical case where you wouldn't want shiftwidth == tabstop && tabstop == softtabstop?
, собственный исходный код Vim используетset shiftwidth=4 tabstop=8 noexpandtab
. Да, обычно хочетсяshiftwidth == softtabstop
, но это не зависит от ценностиtabstop
.Ответы:
Создать
stab
параметр в самом Vim будет непросто, но я разработал эту команду / функцию, которую вы можете.vimrc
добавить в свой (или в файл плагина, если вы суперорганизованы). Используйте,:Stab
и вам будет предложено указать уровень отступа и указать, следует ли его использоватьexpandtab
. Если вы нажмете Enter, не задав новый уровень отступа, он просто распечатает текущие настройки.источник
Это моя первая попытка написать VimScript, но вот что:
Если я помещу это в свой файл .vimrc, я могу вызвать его, запустив
:call Stab(X)
, где X - желаемая ширина табуляции. На данный момент это адекватное решение, но если кто-нибудь может предложить способ облегчить вызов, я был бы признателен.Я также создал функцию, которая быстро суммирует текущие настройки, которые я сопоставил ctrl-Tab:
Что ж, я назначил награду в 100 баллов за этот ответ, и теперь я сам решил половину. Не уверен, что могу принять свой ответ ...
источник
В режиме редактирования вы также можете использовать Ctrl-Tдля отступа и Ctrl-Dдля перехода к следующему уровню отступа, установленному с помощью
shiftwidth
, независимо от настроекtabstop
,softtabstop
илиexpandtab
. Vim автоматически добавит / удалит пробелы или табуляции, чтобы перейти в правый столбец.Если вы используете эти команды для управления отступом вместо Tab/, Backspaceвам не нужно беспокоиться о том, что все эти настройки вкладки подходят друг другу, и всегда добираетесь до правильного уровня отступа.
источник
Если
expandtab
установлено, то (как указывает слишком много php)softtabstop
становится избыточным. Единственная причина, по которой вы могли бы установитьshiftwidth
иное, -tabstop
это удовлетворить странную привычку; например, вы используете отступы из четырех пробелов, но предпочитаете tabвставлять восемь пробелов.Если
expandtab
не установлено, то все становится нечетко. Если вы хотите, чтобы ваш код вcat
редакторах и без редакторов vim выглядел так же, как в vim, тоtabstop
всегда следует устанавливать значение 8; в этом случае вы должны установитьsofttabstop
иshiftwidth
оба на желаемый уровень отступа. Если вместо этого вы предпочитаете, чтобы каждая «физическая вкладка» в файле представляла один уровень отступа, вы должны установитьtabstop
иshiftwidth
на свой предпочтительный уровень отступа и оставитьsofttabstop
равным нулю (установка этого значенияtabstop
эквивалентна, за исключением того, что если вы измените,tabstop
он выйдет из синхронизации в то время как ноль просто означает «игнорируйте это, пожалуйста»).источник
softtabstop
установке правильного значения Backspace удалит отступ, как если бы это была вкладка. что необходимо для разумного использования.Ваше понимание
softtabstop
иexpandtab
неверно, поэтомуstab
вариант, который вы предлагаете, не будет очень полезным.expandtab
предназначен для случаев, когда вы хотите использовать пробелы вместо табуляции для всего . Если вы установилиexpandtab
, Vim игнорирует этуsofttabstop
опцию и используетtabstop
и,shiftwidth
чтобы определить, сколько пробелов нужно вставить.softtabstop
предназначен только для случаев, когда вы хотите использовать сочетание вкладок и пробелов, позволяя делать отступ с точным контролем (2 или 4 пробела), сохраняя при этом ширину табуляции на более высоком значении (обычно 8), чтобы текст отображался в других приложениях . Установкаsofttabstop=tabstop
ничего не дает, потому что Vim всегда будет использовать табуляцию для отступов.Обновление: как указал kaizer.se , если вы используете
expandtab
, вам все равно нужно установитьsofttabstop
, хотите ли вы, чтобы Vim возвращал несколько пробелов, как если бы они были вкладкой.источник
tabstop
иsofttabstop
становитесь одной переменной слишком много, когдаextpandtab
она установлена, я думаю, что вы ошибаетесь в отношении приоритета. Просто попробуйте: установитеts=8 sts=4 et
и нажмите вкладку; курсор будет в пятом столбце, и будут вставлены четыре пробела, как если бы вы установилиts=4 sts=0 et
.softtabstop
установке правильного значения Backspace удалит отступ, как если бы это была вкладка. что необходимо для разумного использования.Вы так часто меняете настройки пустого пространства, что вам действительно нужна функция для управления этим? Если вы много возитесь с tabstop, а также устанавливаете expandtab, у вас, вероятно, со временем будет беспорядок, когда вы меняете файлы с разными значениями, переданными в
stab
. Сегодня пользуюсь:call stab (4)
, завтра уже:call stab (2)
и на прошлой неделе было:call stab (8)
. Похоже, даже если вы напишете это, вы скоро перестанете им пользоваться.Если вы планируете всегда передавать одно и то же значение в stab, почему бы просто не отредактировать глобальные настройки? В vim:
и добавьте следующее:
Вот как настраивается мой .vimrc.
источник
Одна полезная опция -
softtabstop=-1
установить для него значениеshiftwidth
.Вы также можете установить
shiftwidth
значение 0, и в этом случаеtabstop
будет использоваться значение.источник