Источник: Отступ исходного кода
Для отступа без табуляции, принцип состоит в том, чтобы установить 'expandtab' и установить для 'shiftwidth' и 'softtabstop' одно и то же значение, оставляя для 'tabstop' значение по умолчанию:
set expandtab
set shiftwidth=2
set softtabstop=2Эти настройки приведут к использованию пробелов для всех отступов.
Для отступов только с жесткой табуляцией принцип состоит в том, чтобы установить для 'tabstop' и 'shiftwidth' одно и то же значение и оставить для 'expandtab' значение по умолчанию ('noexpandtab') и оставить 'softtabstop' не установленным:
set shiftwidth=2
set tabstop=2Эти настройки приведут к использованию жесткой табуляции для всех отступов.
Для отступов со смешанными табуляциями и пробелами принцип состоит в том, чтобы установить для 'shiftwidth' и' softtabstop' одно и то же значение, оставив для 'expandtab' значение по умолчанию ('noexpandtab'). Обычно 'tabstop' остается со значением по умолчанию:
set shiftwidth=2
set softtabstop=2Эти настройки приведут к тому, что для отступов будет использовано как можно больше жесткой табуляции, а для заполнения останков будут использованы пробелы. Если вы хотите различить «отступ» и «выравнивание», т.е. Количество жесткой табуляции равно уровню отступа, используйте Smart Tabs плагин.
Различные варианты отступов в Vim являются бесконечным источником горя и растерянности для новых пользователей. Существует множество примеров vimrcs, которые расскажут вам, как их правильно настроить. Чаще всего они ошибаются. Пусть :help будет вашим справочным материалом, а эта страница будет вашим руководством по параметрам отступов Vim.
- 'tabstop' изменяет ширину символа
TAB, просто и понятно. - 'softtabstop' влияет на то, что происходит при нажатии клавиш
<TAB>или<BS>. Его значение по умолчанию совпадает со значением'tabstop', но при использовании отступа без жестких вкладок или смешанного отступа вы хотите установить для него то же значение, что и для'shiftwidth'. Если'expandtab'не установлено и'tabstop'отличается от'softtabstop', клавиша<TAB>минимизирует количество вставляемых пробелов, используя кратные символыTAB. Например, если'tabstop'равно 8, а количество вставленных последовательных пробелов равно 20, будут использованы два символаTABи четыре пробела. - 'shiftwidth' влияет на то, что происходит, когда вы нажимаете
>>,<<или==. Это также влияет на работу автоматического отступа. (Увидеть ниже.) - 'expandtab' влияет на то, что происходит, когда вы нажимаете клавишу
<TAB>. Если установлен параметр'expandtab', то при нажатии клавиши<TAB>всегда будет вставлено количество пробелов в символе softtabstop. В противном случае количество вставленных пробелов минимизируется с помощью символовTAB. - 'smarttab' влияет на то, как интерпретируются нажатия клавиш
<TAB>в зависимости от того, где находится курсор. Если'smarttab'включен, клавиша<TAB>вставляет отступ в соответствии с'shiftwidth'в начале строки, тогда как'tabstop'и'softtabstop'используются в других местах. Редко нужно устанавливать эту опцию, если только нет необходимости использовать жесткие символыTABв основном тексте или коде.
Использование значения 'tabstop', отличного от значения по умолчанию (8 пробелов), приведет к тому, что ваш файл будет иметь другой вид при использовании таких инструментов, как cat (type в Windows), которые не могут использовать настраиваемую ширину символ табуляции. С другой стороны, использование жестких вкладок для отступа позволяет другим просматривать ваш код с тем количеством отступов, которое они предпочитают. Какие из этих соображений должны иметь приоритет, зависит от личных предпочтений (и политики компании).
В Vim есть несколько методов, позволяющих автоматически делать отступы, начиная от довольно «глупых» и ненавязчивых, таких как «autoindent» и «smartindent», до сложных, таких как «cindent» и пользовательские отступы, основанные на типе файла, используя 'indentexpr'. Количество отступов, используемых для одного уровня, контролируется опцией 'shiftwidth'. (См. Выше.)
'autoindent' не делает ничего, кроме копирования отступа из предыдущей строки при запуске новой строки. Это может быть полезно для структурированных текстовых файлов или когда вы хотите контролировать большую часть отступов вручную, без вмешательства Vim.
'autoindent' не мешает другим настройкам отступов, а некоторые сценарии отступов на основе типов файлов даже включают его автоматически.
'smartindent' автоматически вставляет один дополнительный уровень отступа в некоторых случаях и работает для C-подобных файлов. 'cindent' более настраиваемый, но и более строгий, когда дело доходит до синтаксиса.
'smartindent' и' cindent' могут мешать отступам на основе типов файлов и никогда не должны использоваться вместе с ними.
Когда дело доходит до C и C ++, отступы, основанные на типе файла, автоматически устанавливают 'cindent', и по этой причине нет необходимости устанавливать' cindent' для таких файлов вручную. В этих случаях по-прежнему применяются параметры 'cinwords',' cinkeys' и 'cinoptions'.
Как правило, «smartindent» или «cindent» следует устанавливать только вручную, если вы не удовлетворены тем, как работает отступ на основе типа файла.
Этот тип отступа является наиболее гибким, поскольку позволяет пользователям настраивать отступ для каждого типа файла. Вы можете включить этот тип автоматического отступа с помощью следующей команды: filetype plugin indent on. Эта команда будет использовать скрипты отступов, расположенные в папке indent вашей инсталляции vim.
Например, скрипты отступа для типов файлов C и C ++ правильно устанавливают опцию 'cindent', и есть очень компетентные скрипты отступа для Ruby, Perl и многих других языков и типов файлов. Отступ на основе типа файла даже работает корректно с Makefile без помех!
Если вы планируете использовать отступ, основанный на типе файла, не устанавливайте 'smartindent' или 'cindent'. Вы все еще можете установить 'autoindent', так как это не мешает.
vimrc_example.vim, поставляемый с Vim, включает отступ на основе типа файла:
if has("autocmd")
" Enable file type detection.
" Use the default filetype settings, so that mail gets 'tw' set to 72,
" 'cindent' is on in C files, etc.
" Also load indent files, to automatically do language-dependent indenting.
filetype plugin indent on
" ...
endifВы можете захотеть использовать отступ для html-файлов, чтобы использовать табуляцию с 2 столбцами на отступ, в то время как файлы Python используют пробелы с 4 столбцами на отступ. Чтобы автоматически применить подходящие настройки, сначала включите определение типа файла, указав в своем vimrc следующее:
filetype plugin indent onСоздайте файл html.vim с содержимым:
setlocal shiftwidth=2
setlocal tabstop=2и файл python.vim с содержимым:
setlocal expandtab
setlocal shiftwidth=4
setlocal softtabstop=4Файлы html.vim и python.vim должны находиться в этом каталоге (который вам может потребоваться создать):
~/.vim/after/ftpluginв Unix-системах; или же$HOME/vimfiles/after/ftpluginв системах Windows
Стандартные плагины, вероятно, не изменяют настройки, такие как shiftwidth, и в этом случае каталог ~/.vim/ftplugin (или $HOME/vimfiles/ftplugin) будет работать в качестве альтернативы. Однако следует использовать каталог «after», поскольку вы намерены переопределить настройки других плагинов.
Рекомендуется использовать каталог "after", как указано выше, но в качестве альтернативы можно поместить такие команды, как следующие, в ваш vimrc:
autocmd FileType html setlocal shiftwidth=2 tabstop=2
autocmd FileType python setlocal expandtab shiftwidth=4 softtabstop=4