Установка предпочтений пробелов Vim по типу файла

В моей работе я должен следовать домашнему стилю отступов, который выглядит следующим образом:

  • 2 пробела при кодировании html и ruby
  • вкладки при кодировании javascript, рекомендуется tabwidth = 4

Как лучше всего указать разные предпочтения пробелов для каждого типа файла?


person nelstrom    schedule 13.10.2009    source источник
comment
возможный дубликат Изменение поведения отступов Vim по типу файла   -  person acgtyrant    schedule 12.07.2015
comment
Все эти ответы еще больше сбили меня с толку. Проблема в том, что варианты зависят от ваших предпочтений. Однако принятый ответ имеет приятный синтаксис. Это было отличное руководство: vimcasts.org/transcripts/2/en   -  person Mikael Lindlöf    schedule 02.02.2016


Ответы (5)


Есть много способов, но вот простой и понятный. добавьте эти строки в свой ~/.vimrc:

autocmd FileType html setlocal ts=2 sts=2 sw=2
autocmd FileType ruby setlocal ts=2 sts=2 sw=2
autocmd FileType javascript setlocal ts=4 sts=4 sw=4
person Peter    schedule 13.10.2009
comment
ts = 'количество пробелов, которые ‹Tab› в файле использует' sts = 'количество пробелов, которые ‹Tab› использует при редактировании' sw = 'количество пробелов, используемых для (автоматического) шага отступа', подробности см .: vimdoc.sourceforge.net/htmldoc/quickref.html#option-list - person zdsbs; 03.01.2014
comment
Мне нужно было добавить expandtab хотя бы для рубина, см. Ответ «слишком много php» здесь - person Michael Durrant; 21.05.2019

Ответ Питера достаточно прост, но, к сожалению, варианты неверны. Вместо этого вам нужно использовать следующие параметры:

autocmd Filetype html setlocal ts=2 sw=2 expandtab
autocmd Filetype ruby setlocal ts=2 sw=2 expandtab
autocmd Filetype javascript setlocal ts=4 sw=4 sts=0 noexpandtab

Также обратите внимание:

  • Вы можете заставить vim показывать символы табуляции с помощью :set list.
  • После того, как вы правильно настроили параметры табуляции / пробела, вы можете заставить vim восстановить файл (заменить пробелы табуляциями или наоборот) с помощью команды :retab!.
person too much php    schedule 13.10.2009
comment
В чем преимущество expandtab перед sts=2 - person James McMahon; 14.10.2013
comment
@JamesMcMahon expandtab расширяет все вкладки до пробелов. sts (softtabstop) вставляет пробелы и табуляции для отступов: столько табуляции, сколько умещается в отступе, в зависимости от размера табуляции, а затем пробелы после этого. Конечно, если включено expandtab, все вставляемые вкладки преобразуются в пробелы. stackoverflow.com/questions/1562336/ может помочь в дальнейшем. Без развернутой вкладки в ответ Питера будут вставлены вкладки шириной в 2 символа, а не пробелы. - person ajmccluskey; 28.04.2014

+1 к ответу Питера, но Vim предлагает и другое решение. Если вы хотите сделать что-то более сложное, чем один setlocal, например, настроить сразу несколько параметров, команд и сопоставлений, тогда на помощь приходит функция плагина vim filetype.

Вам необходимо иметь filetype plugin on или filetype plugin indent on в вашем .vimrc, а затем создать плагин, например, для рубин вы можете создать ~/.vim/ftplugin/ruby.vim. Технически вы можете использовать здесь любые команды, которые вам нравятся, для запуска при загрузке файла Ruby, но рекомендуемые включают setlocal, map <buffer>, command -buffer и определяющие функции. Еще больше информации можно найти в Руководстве пользователя; если вы хорошо знакомы со сценариями vim, перейдите к :help 41.11, в противном случае прочтите :help usr_40 и :help usr_41.

person hobbs    schedule 13.10.2009

Также есть хороший сценарий vim: DetectIndent, который пытается определить отступы файл, который вы открываете. Это очень удобно, если вы работаете с большим количеством файлов с разным стилем кодирования.

Я использую автокоманду в своем .vimrc:

:autocmd BufReadPost * :DetectIndent 
person Benedikt Waldvogel    schedule 16.10.2009

Чтобы вставлять пробелы при каждом нажатии клавиши табуляции, установите параметр «expandtab»:

:set expandtab

Следующим шагом является контроль количества пробелов, которые будут вставлены при нажатии клавиши табуляции, установите опцию 'tabstop'. Например, чтобы вставить 2 пробела для табуляции, используйте:

:set tabstop=2

ref: http://vim.wikia.com/wiki/Converting_tabs_to_spaces

person bartoindahouse    schedule 09.06.2015