Изменение поведения отступов Vim в зависимости от типа файла - PullRequest
352 голосов
/ 01 октября 2008

Может ли кто-нибудь объяснить мне простым языком самый простой способ изменить поведение Vim для отступов в зависимости от типа файла? Например, если я открываю файл Python, он должен иметь отступ от 2 пробелов, но если я открываю скрипт Powershell, он должен использовать 4 пробела.

Ответы [ 10 ]

282 голосов
/ 01 октября 2008

Вы можете добавить .vim файлы, которые будут выполняться всякий раз, когда vim переключается на определенный тип файла.

Например, у меня есть файл ~/.vim/after/ftplugin/html.vim с таким содержанием:

setlocal shiftwidth=2
setlocal tabstop=2

Что заставляет vim использовать вкладки шириной 2 символа для отступа (опция noexpandtab глобально установлена ​​в другом месте моей конфигурации).

Это описано здесь: http://vimdoc.sourceforge.net/htmldoc/usr_05.html#05.4, прокрутите вниз до раздела о плагинах типов файлов.

156 голосов
/ 01 октября 2008

Используйте ftplugins или автокоманды для установки параметров.

ftplugin

В ~/.vim/ftplugin/python.vim:

setlocal shiftwidth=2 softtabstop=2 expandtab

И не забудьте включить их в ~/.vimrc:

filetype plugin indent on

(:h ftplugin для получения дополнительной информации)

автокомандного

В ~/.vimrc:

autocmd FileType python setlocal shiftwidth=2 softtabstop=2 expandtab

Вы можете заменить любую из длинных команд или настроек их короткими версиями:
autocmd: au
setlocal: setl
shiftwidth: sw
tabstop: ts
softtabstop: sts
expandtab: et

Я бы также предложил изучить разницу между tabstop и softtabstop. Многие люди не знают о softtabstop.

77 голосов
/ 08 мая 2015

отредактируйте ~/.vimrc и добавьте файлы разных типов для разных отступов, например. Я хочу отступ html/rb для 2 пробелов и отступ для файлов js/coffee для 4 пробелов:

" by default, the indent is 2 spaces. 
set shiftwidth=2
set softtabstop=2
set tabstop=2

" for html/rb files, 2 spaces
autocmd Filetype html setlocal ts=2 sw=2 expandtab
autocmd Filetype ruby setlocal ts=2 sw=2 expandtab

" for js/coffee/jade files, 4 spaces
autocmd Filetype javascript setlocal ts=4 sw=4 sts=0 expandtab
autocmd Filetype coffeescript setlocal ts=4 sw=4 sts=0 expandtab
autocmd Filetype jade setlocal ts=4 sw=4 sts=0 expandtab

см. Настройка параметров пробела Vim по типу файла

58 голосов
/ 01 октября 2008

Поместите команды autocmd на основе суффикса файла в ~ / .vimrc

autocmd BufRead,BufNewFile   *.c,*.h,*.java set noic cin noexpandtab
autocmd BufRead,BufNewFile   *.pl syntax on

Вероятно, вам нужны следующие команды: ts = и sw =

23 голосов
/ 01 октября 2008

Я обычно работаю с набором expandtab, но это плохо для make-файлов. Я недавно добавил:

:autocmd FileType make set noexpandtab

до конца моего файла .vimrc, он распознает Makefile, makefile и * .mk как make-файлы и не расширяет вкладки. Предположительно, вы можете расширить это.

14 голосов
/ 03 мая 2012

Меня всегда удивляют люди, которые меняют размер вкладок для разных типов файлов. Что, черт возьми, вы делаете, когда смотрите на файл используя less?

Лично я использую эти настройки в .vimrc:

autocmd FileType python set tabstop=8|set shiftwidth=2|set expandtab
autocmd FileType ruby set tabstop=8|set shiftwidth=2|set expandtab
6 голосов
/ 17 марта 2012

Это может быть известно большинству из нас, но в любом случае (я был озадачен в первый раз): Выполнение :set et (:set expandtabs) не меняет вкладки, уже существующие в файле, необходимо выполнить :retab. Например:

:set et
:retab

и вкладки в файле заменяются достаточным количеством пробелов. Для возврата вкладок просто сделайте:

:set noet
:retab
4 голосов
/ 03 июня 2017

Сегодня вы можете попробовать editorconfig , для него также есть плагин vim . Благодаря этому вы можете не только изменять размер отступа в vim, но и во многих других редакторах сохранять согласованные стили кодирования.

Ниже приведен простой файл editorconfig, как вы можете видеть, файлы python будут иметь 4 пробела для отступа, а файлы шаблонов pug - только 2.

# 4 space indentation for python files
[*.py]
indent_style = space
indent_size = 4

# 2 space indentation for pug templates
[*.pug]
indent_size = 2
3 голосов
/ 15 мая 2009

Несмотря на то, что вы можете точно настроить отступы Vim, используя плагин Indent или вручную, используя настройки, я рекомендую использовать скрипт Python Vindect , который автоматически устанавливает соответствующие настройки при открытии файла Python. Используйте этот совет , чтобы сделать использование Vindect еще более эффективным. Когда я впервые начал редактировать файлы Python, созданные другими людьми с различными стилями отступов (табуляция против пробела и количество пробелов), это было невероятно сложно. Но Vindect вместе с этим файлом отступа

Также рекомендуем:

1 голос
/ 05 декабря 2015

Я использую утилиту, написанную на C, которая называется autotab. Он анализирует первые несколько тысяч строк файла, который вы загружаете, и определяет значения для параметров Vim shiftwidth, tabstop и expandtab.

Это компилируется с использованием, например, gcc -O autotab.c -o autotab. Инструкции по интеграции с Vim находятся в заголовке комментария вверху.

Autotab довольно умен, но время от времени может запутаться, в частности из-за того, что он некорректно поддерживается с использованием разных стилей отступов.

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

Он работает для различных языков программирования и простит «внеполосные» элементы, которые не подчиняются приращениям, таким как директивы предварительной обработки C, метки операторов C, не говоря уже об очевидных пустых строках.

...