Изменение поведения отступов Vim в зависимости от типа файла

StackOverflow https://stackoverflow.com/questions/158968

Вопрос

Может ли кто-нибудь объяснить мне простыми словами самый простой способ изменить поведение отступов 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, не говоря уже об очевидных пустых строках.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top