Во-первых, не используйте Tabключ в Vim для ручного отступа. Vim имеет пару команд в режиме вставки для ручного увеличения или уменьшения величины отступа. Эти команды Ctrl-Tи Ctrl-D. Эти команды соблюдать значения tabstop
, shiftwidth
и expandtab
, и поддерживать правильную смесь пространств и вкладок (максимальное количество вкладок с последующим любым необходимым числом пробелов).
Во-вторых, эти ручные отступы в любом случае не нужно использовать очень часто, если вы используете автоматический отступ.
Если Ctrl-Tвместо того, чтобы Tabбеспокоить вас, вы можете переназначить его:
:imap <Tab> ^T
Вы также можете переназначить, Shift-Tabчтобы сделать Ctrl-Ddeindent:
:imap <S-Tab> ^D
Здесь ^ T и ^ D - буквенные управляющие символы, которые можно вставить как Ctrl-VCtrl-T.
Имея это отображение, вы все равно можете набрать литеральную Tab в буфер, используя Ctrl-VTab. Обратите внимание, что если вы сделаете это, даже если :set expandtab
он включен, вы получите нерасширенный символ табуляции.
Эффект, аналогичный <Tab>
карте, достигается при использовании :set smarttab
, которое также заставляет backspace в передней части линии вести себя умно.
В smarttab
режиме, когда Tabиспользуется не в начале строки, это не имеет особого значения. Это отличается от моего выше отображения Tabк Ctrl-T, так как Ctrl-Tиспользуемый в любой точке линии (в режиме вставки) увеличит отступ этой линии.
Другие полезные сопоставления могут быть:
:map <Tab> >
:map <S-Tab> <
Теперь мы можем делать такие вещи, как выделение строк и нажимать, Tabчтобы отступать над ними. Или Tabдважды нажмите на строку (в командном режиме), чтобы увеличить отступ.
Если вы используете правильные команды управления отступы, то все контролируется тремя параметрами: shiftwidth
, tabstop
и expandtab
.
shiftwidth
Параметр контролирует размер отступа; если вы хотите четыре пробела, используйте :set shiftwidth=4
или сокращение :set sw=4
.
Если только это будет сделано, отступ будет создан с использованием комбинации пробелов и табуляций, потому что noexpandtab
это значение по умолчанию. Использование :set expandtab
. Это приводит к тому, что символы табуляции, которые вы вводите в буфер, расширяются в пробелы, а для отступа, управляемого Vim, используются только пробелы.
Когда expandtab
включено, и если вы управляете своим отступом через все надлежащие механизмы Vim, значение tabstop
становится неактуальным. Он контролирует, как появляются вкладки, если они появляются в файле. Если у вас есть, set tabstop=8 expandtab
а затем вставьте жесткую вкладку в файл с помощью Ctrl-VTab, он, как обычно, произведет выравнивание по следующей позиции табуляции на 8 столбцов.