Изменение поведения отступов Vim в зависимости от типа файла
-
03-07-2019 - |
Вопрос
Может ли кто-нибудь объяснить мне простыми словами самый простой способ изменить поведение отступов Vim в зависимости от типа файла?Например, если я открываю файл Python, в нем должно быть два пробела, но если я открываю сценарий Powershell, он должен использовать 4 пробела.
Решение
Можете добавить .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, прокрутите вниз до раздела, посвященного плагинам типов файлов.
Другие советы
Используйте 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
.
отредактируйте свой ~/.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 по типу файла
Поместите команды autocmd на основе суффикса файла в ваш ~/.vimrc.
autocmd BufRead,BufNewFile *.c,*.h,*.java set noic cin noexpandtab
autocmd BufRead,BufNewFile *.pl syntax on
Команды, которые вы ищете, вероятно, ts= и sw=.
Я обычно работаю с expandtab
set, но это плохо для make-файлов.Недавно я добавил:
:autocmd FileType make set noexpandtab
до конца моего файла .vimrc, и он распознает Makefile, makefile и *.mk как файлы makefile и не раскрывает вкладки.Вероятно, вы можете расширить это.
Меня всегда удивляют люди, которые меняют размер вкладок для разных типов файлов.Что, черт возьми, вы делаете, когда просматриваете файл, используя less?
Лично я использую такие настройки в .vimrc:
autocmd FileType python set tabstop=8|set shiftwidth=2|set expandtab
autocmd FileType ruby set tabstop=8|set shiftwidth=2|set expandtab
Это может быть известно большинству из нас, но в любом случае (в первый раз я был озадачен):Делает :set et
(:set
expandtabs) не меняет уже существующие в файле вкладки, это необходимо сделать :retab
.Например:
:set et
:retab
и табуляции в файле заменяются достаточным количеством пробелов.Чтобы вернуть вкладки, просто выполните:
:set noet
:retab
Сегодня вы можете попробовать редакторконфигурация, есть еще плагин vim для этого.Благодаря этому вы можете не только изменять размер отступов в vim, но и во многих других редакторах, сохраняя единообразные стили кодирования.
Ниже приведена простая конфигурация редактора: как видите, в файлах 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
Хотя вы можете легко настроить отступы Vim с помощью плагина отступов или вручную с помощью настроек, я рекомендую использовать скрипт Python под названием Виндект который автоматически устанавливает для вас соответствующие настройки при открытии файла Python.Использовать этот совет сделать использование Vindect еще более эффективным.Когда я впервые начал редактировать файлы Python, созданные другими, с различными стилями отступов (табуляция, пробел и количество пробелов), это меня невероятно расстраивало.Но Винект вместе с этот файл отступа
Также рекомендую:
Я использую утилиту, написанную на языке C, под названием autotab
.Он анализирует первые несколько тысяч строк загружаемого вами файла и определяет значения параметров Vim. shiftwidth
, tabstop
и expandtab
.
Это компилируется с использованием, например, gcc -O autotab.c -o autotab
.Инструкции по интеграции с Vim находятся в шапке комментария вверху.
Autotab довольно умен, но время от времени может запутаться, в частности, из-за того, что он поддерживается непоследовательно с использованием разных стилей отступов.
Если в файле для отступов явно используются табуляции или комбинация табуляции и пробелов, Autotab определит, какой размер табуляции используется, учитывая такие факторы, как выравнивание внутренних элементов по последовательным строкам, например комментарии.
Он работает для множества языков программирования и прощает «внешние» элементы, которые не подчиняются приращениям отступов, такие как директивы предварительной обработки C, метки операторов C, не говоря уже об очевидных пустых строках.