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

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

Ответ 1

Вы можете добавить файлы .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, прокрутите вниз до раздела плагинов типа файла.

Ответ 2

Используйте 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.

Ответ 3

отредактируйте свой ~/.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 по типу файлов

Ответ 4

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

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

Команды, которые вы ищете, вероятно, ts = и sw =

Ответ 5

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

:autocmd FileType make set noexpandtab

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

Ответ 6

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

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

autocmd FileType python set tabstop=8|set shiftwidth=2|set expandtab
autocmd FileType ruby set tabstop=8|set shiftwidth=2|set expandtab

Ответ 7

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

:set et
:retab

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

:set noet
:retab

Ответ 8

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

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

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

# 2 space indentation for pug templates
[*.pug]
indent_size = 2

Ответ 9

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

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

Ответ 10

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

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

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

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

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