Может ли кто-нибудь объяснить мне простыми словами самый простой способ изменить поведение отступа Vim на основе типа файла? Например, если я открываю файл Python, он должен иметь отступы с двумя пробелами, но если я открою Powershell script, он должен использовать 4 пробела.
Изменение поведения отступа Vim по типу файла
Ответ 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, не говоря уже о очевидных пустых строках.