Неправильний відступ під час редагування Yaml у Vim


90

Здається, Vim неправильно реагує на символ тире у файлах YAML, тому порушує формат.

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

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

Коли я закінчую набирати текст restart exim4і service:набираю Vim reindents мій останній serviceрядок:

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

Очевидно, що Вім намагається вирівняти речення за стовпцями, але це не те, що потрібно в YAML. Я хочу створити масив із двома значеннями.

Як це виправити?

Відповіді:


25

Встановіть цей плагін:

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

Це зроблено з урахуванням Ansible, але теоретично він буде працювати з усіма видами файлів YAML. Вам доведеться: встановити filetype = ansible, на жаль, якщо ви не працюєте з файлами, пов'язаними з ansible.


Я бачив цей плагін - він очікує, що ім'я файлу матиме певне ім'я та / або бути в певній папці. Ansible playbooks - це не єдині файли, які я редагую. Ось чому я навіть не намагався його встановити. Дякую, я встановлю yml для типу "ansible".
Glueon

1
вау, це велика різниця, я думаю, хоча звичайний yamlсинтаксис варто також виправити
Акостадінов

Правда, якщо ви підете цим шляхом, вам доведеться вставити # vim:ft=ansible:всі свої файли, що не відповідають.
Елайджа Лінн,

158

Для того, щоб отримати приємний 2-пробільний YAML за замовчуванням, коли я натискаю на повернення каретки після двокрапки, я додав це до свого .vimrc:

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

Це також добре поєднується з тире для очікуваного результату ОП.


2
Дякую, це робить свою роботу.
Gayan Weerakutti

Приємно і просто. Працює з /etc/vim/vimrc(для глобальної конфігурації), тоді як я не міг змусити vim-ansible-yamlплагін працювати глобально.
Помилка сервера

4
Подумайте про те, щоб розмістити його в ~ / vim / ftplugin / yaml.vim та замінити короткі імена довгими іменами для подальшої читабельності.
exic

3
@LeviNoecker так, просто відокремлюй їх комою такautocmd FileType yaml,yml setlocal ...
Trey Stout

2
Це сума моїх коментарів вище -> gist.github.com/dragonken/c29123e597c6fdf022284cf36d245b64
Елайджа Лінн,

18

Ви можете вимкнути повторне введення, коли вводите :ключ:

:set indentkeys-=<:>

Будь ласка, відредагуйте ~/.vimrcфайл і додайте такі рядки:

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

Примітка: autocmd приходить після filetype.


Ви можете запустити повторне введення, набравши CTRL-Fв режимі INSERT , наприклад:

hello: world
    foo: bar<C-F>

9

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

" Fix auto-indentation for YAML files
augroup yaml_fix
    autocmd!
    autocmd FileType yaml setlocal ts=2 sts=2 sw=2 expandtab indentkeys-=0# indentkeys-=<:>
augroup END

В основному для файлу YAML він вказує Vim:

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

Додавання .yml також допомагає
Герт ван ден Берг

До того, що? Де?
mr.zog

3

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

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

Тоді кожен, хто використовує цей файл із vim за замовчуванням, може поділитися конфігурацією творця файлу. Це добре працює, особливо під час співпраці.


1

Ось 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

0

Я виявив, що https://github.com/stephpy/vim-yaml чудово працює. Це плагін vim, який робить відступи (та виділення синтаксису) файлів yaml. Встановлення вирішує конкретну проблему, про яку ви також запитували.

Вам потрібно встановити плагін (див. Doco у репозиторії GitHub) і доки filetype=yamlвін буде виправляти ваш відступ. Це допоможе вам обом

  1. коли ви вводите фрагмент, який ви надали, або
  2. якщо у вас вже є якийсь написаний yaml, ви можете його вибрати ( Vдля вибору по рядку потім скористайтесь jабо, kщоб вибрати більше рядків), а потім ініціюйте форматування vim за допомогою=
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.