Как изменить размер вкладки в Vim?

172

Каждый раз, когда я добавляю селектор в CSS и нажимаю, Enterчтобы определить свойства, он выглядит так:

#selector {
        property: value;
}

(8 пробелов на вкладках)

Как я могу настроить Vim, чтобы сделать это так:

#selector {
    property: value;
}

(4 пробела на вкладках)

alexchenco
источник
4
Хотите одну вкладку шириной 4 пробела? Четыре пробела? Или четыре вкладки шириной в 1 пробел? Это разные вещи, а вам не понятно. В любом случае, начните с чтения: он тс, он кач, и он расширяется
abeyer

Ответы:

103

Расширяя ответ Zoul:

Если вы хотите настроить Vim на использование определенных настроек при редактировании определенного типа файла, вам нужно использовать автокоманды:

autocmd Filetype css setlocal tabstop=4

Это позволит сделать так, чтобы вкладки отображались в виде 4 пробелов. Установка expandtabзаставит Vim фактически вставлять пробелы (количество которых контролируется tabstop), когда вы нажимаете tab; Вы можете захотеть использовать его softtabstopдля правильной работы Backspace (то есть уменьшить отступы, когда это происходит в случае использования вкладок, вместо того, чтобы всегда удалять по одному символу за раз).

Для того, чтобы полностью обоснованное решение о том , как установить вещи, вам нужно прочитать Vim документы на tabstop, shiftwidth, softtabstopи expandtab. Самый интересный бит находится под expandtab( :help 'expandtab):

Существует четыре основных способа использования вкладок в Vim:

  1. Всегда держите «tabstop» на 8, установите «softtabstop» и «shiftwidth» на 4 (или 3 или что вы предпочитаете) и используйте «noexpandtab». Тогда Vim будет использовать комбинацию табуляции и пробелов, но при вводе будет вести себя так, как будто табуляция появляется каждые 4 (или 3) символа.

  2. Установите «tabstop» и «shiftwidth» на то, что вы предпочитаете, и используйте «expandtab». Таким образом, вы всегда будете вставлять пробелы. Форматирование никогда не будет испорчено при изменении tabstop.

  3. Установите «tabstop» и «shiftwidth» на то, что вы предпочитаете, и используйте | modeline | установить эти значения при повторном редактировании файла. Работает только при использовании Vim для редактирования файла.

  4. Всегда устанавливайте «tabstop» и «shiftwidth» на одно и то же значение, и «noexpandtab». Это должно сработать (только для начальных отступов) для любой настройки табуляции, которую используют люди. Возможно, было бы неплохо, чтобы после первой непустой вставки были вставлены пробелы, если вы сделаете это. В противном случае выровненные комментарии будут неправильными при изменении 'tabstop'.

Михал Марчик
источник
Кроме того, не беспокойтесь слишком сильно о возможности передумать позже ... см. :help retab(Проверьте вариант!).
Михал Марчик
Дополняет ли использование autocmd использование .vimrc или альтернатива?
Джош Десмонд
225
:set tabstop=4
:set shiftwidth=4
:set expandtab

Это вставит четыре пробела вместо символа табуляции. Пробелы немного более «стабильны», это означает, что текст с отступом будет отображаться одинаково в браузере и любом другом приложении.

Zoul
источник
83
Да, но вкладки семантические (каждая вкладка означает один слой отступа), а пробелы - чисто презентационные. Или, другими словами, использование вкладок позволит другим людям, просматривающим ваш код, отображать их настолько широко, насколько им удобно, тогда как пробелы не позволят этого.
К Прайм
11
Обратите внимание, что если вы предпочитаете, чтобы «>» и «<» перемещали ваш текст на то же расстояние, что и клавиша табуляции , вы можете просто :set shiftwidth=0войти в vimrc и забыть об этом навсегда, потому что это говорит vim, что вы всегда хотите, чтобы он совпадал tabstop.
SeldomNeedy
133

Чтобы внести изменения для одного сеанса, используйте эту команду:

:set tabstop=4

Чтобы сделать изменение постоянным, добавьте его ~/.vimrcили ~/.vim/vimrc:

set tabstop=4

Это затронет все файлы, а не только CSS. Чтобы влиять только на CSS-файлы:

autocmd Filetype css setlocal tabstop=4

как указано в ответе Михала .

Кит
источник
2
если вы хотите, чтобы табуляция работала как четыре пробела, необходимо добавить и другие строки в ответе @Zoul к .vimrc; то есть, добавьте 'set shiftwidth = 4' и 'set expandtab' в .vimrc.
17
7
Вопрос "Как мне изменить размер вкладки в Vim?"
Кит
Вот как бы я это сделал. Чтобы обеспечить ~/.vimrcпостоянное резервное копирование, я обычно сохраняю файл в своей папке Dropbox, а затем создаю символическую ссылку на рабочий стол:ln -s /home/myfolder/Dropbox/.vimrc ~
enchance
41

Некоторые ответы на этой странице являются «одноразовыми» исправлениями описанной проблемы. Это значит, что при следующем открытии документа с помощью vim вернутся настройки предыдущей вкладки.

Если кто-то заинтересован в постоянном изменении настроек вкладки:

Александр МакНалти
источник
11
Это вставляет пробелы, а не табуляции.
Сверхновая
5
@Supernovah вы можете удалить "вкладку", чтобы получить вкладки
kommradHomer
29

Как однострочник в vim :

:set tabstop=4 shiftwidth=4 expandtab

Для постоянной настройки добавьте эти строки в ~ / .vimrc :

set tabstop=4
set shiftwidth=4
set expandtab
oz19
источник
6

ОБНОВИТЬ

Если вы работаете в конкретном проекте, я настоятельно рекомендую использовать editorconfig .

Это позволяет вам определить .editorconfig файл в корне вашего хранилища, определяя отступы, которые вы хотите использовать для каждого типа файлов в вашем хранилище.

Например:

root = true

[*.css]
charset = utf-8
indent_style = space
indent_size = 4

[*.js]
charset = utf-8
indent_style = space
indent_size = 2

Есть плагин vim который автоматически настраивает vim в соответствии с файлом конфигурации для открываемого вами файла.

Кроме того, .editorconfig файл автоматически поддерживается во многих других IDE и редакторах, поэтому он является наилучшим вариантом для совместной работы пользователей в разных средах.

ОРИГИНАЛЬНЫЙ ОТВЕТ

Если вам нужно часто менять размеры и вы не хотите связывать это с конкретным типом файла, вы можете иметь предопределенные команды в вашем файле .vimrc для быстрого переключения настроек:

nmap <leader>t :set expandtab tabstop=4 shiftwidth=4 softtabstop=4<CR>
nmap <leader>m :set expandtab tabstop=2 shiftwidth=2 softtabstop=2<CR>

Это сопоставляет два разных набора размеров ключам \ t и \ m. Вы можете привязать это к любым ключам, которые вы хотите.

Jens
источник