Подтвердить что ты не робот

Неправильный отступ при редактировании Yaml в Vim

Кажется, что Vim неправильно реагирует на символ тире в файлах YAML, поэтому нарушая формат.

Например, у меня есть блок, который должен выглядеть так:

  handlers:
        - name: restart exim4
          service: name=exim4 state=restarted

Когда я заканчиваю набирать restart exim4 и набираю service: Vim переопределяет мою окончательную строку service:

  handlers:
        - name: restart exim4
        service: name=exim4 state=restarted

Таким образом, Vim пытается выровнять предложения по столбцам, но это не то, что нужно в YAML. Я хочу создать массив с двумя значениями.

Как это исправить?

4b9b3361

Ответ 1

Установите этот плагин:

https://github.com/chase/vim-ansible-yaml

Это сделано с Ansible в уме, но в теории оно будет работать со всеми видами файлов YAML. Вам придется: установить filetype = ansible, к сожалению, если вы не работаете с доступными связанными файлами.

Ответ 2

Чтобы получить хороший 2-пространственный YAML в качестве значения по умолчанию, когда я ударил возврат каретки после двоеточия, я добавил это к моему .vimrc:

autocmd FileType yaml setlocal ts=2 sts=2 sw=2 expandtab

Это также хорошо сочетается с тире для ожидаемого результата OP.

Ответ 3

Вы можете отключить reindent при вводе ключа ::

:set indentkeys-=<:>

Измените ~/.vimrc файл и добавьте следующие строки:

filetype plugin indent on
autocmd FileType yaml setl indentkeys-=<:>

Примечание: autocmd появляется после filetype.


Вы можете вызвать reindent, набрав CTRL-F в режиме INSERT, например:

hello: world
    foo: bar<C-F>

Ответ 4

Вы можете использовать эту автокоманду, чтобы Vim правильно сделал отступ для YAML файлов (поместите его в ваш .vimrc):

autocmd FileType yaml setlocal ts=2 sts=2 sw=2 expandtab indentkeys-=0# indentkeys-=<:>

По сути, для файла YAML он указывает Vim:

  • Используйте 2 пробела для отступа.
  • Используйте пробелы вместо вкладок.
  • Пропустить повторный отступ строк после вставки символа комментария (#) в начале строки или двоеточия.

Ответ 5

Вы можете добавить комментарий в свой YAML, чтобы сообщить Vim специальную конфигурацию для этого файла. Например:

# vim: set shiftwidth=2 tabstop=2 softtabstop=-1 expandtab:
foo:
  bar:
  - a
  - b

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

Ответ 6

Я нашел https://github.com/stephpy/vim-yaml, чтобы работать отлично. Это плагин vim, который выполняет отступ (и подсветку синтаксиса) файлов yaml. Его установка решает ту проблему, о которой вы тоже спрашивали.

Вам нужно установить плагин (см. Документацию в репозитории GitHub), и пока ваш filetype=yaml он исправит ваш отступ. Это поможет вам обоим

  1. во время ввода предоставленного вами фрагмента или
  2. если у вас уже есть написанное yaml, вы можете выбрать его (с V для строчного выбора, затем используйте j или k для выбора большего количества строк) и затем запустить форматирование vim с помощью =

Ответ 7

Вот группа, augroup я имею для yaml:

augroup filetype_yaml
    autocmd!
    autocmd BufNewFile,BufReadPost *.{yaml,yml} set filetype=yaml foldmethod=indent
    autocmd FileType yaml |
        setlocal shiftwidth=2 |
        setlocal softtabstop=2 |
        setlocal tabstop=2
augroup END