Vim에서 Yaml을 편집 할 때 잘못된 들여 쓰기


91

Vim이 YAML 파일의 대시 기호에서 올바르게 반응하지 않아 형식이 깨집니다.

예를 들어 다음과 같은 블록이 있습니다.

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

I 입력을 마치면 restart exim4및 입력 service:빔 내 마지막 reindents service라인 :

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

따라서 Vim은 문장을 열 단위 로 정렬하려고 하지만 YAML에서 필요한 것은 아닙니다. 두 개의 값으로 배열을 만들고 싶습니다.

어떻게 고칠까요?

답변:


25

이 플러그인을 설치하십시오.

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

Ansible을 염두에두고 만들어졌지만 이론적으로는 모든 종류의 YAML 파일에서 작동합니다. 안타깝게도 ansible 관련 파일로 작업하지 않는 경우 : set filetype = ansible을해야합니다.


이 플러그인을 보았습니다. 파일 이름에 특정 이름이 있거나 특정 폴더에있을 것으로 예상합니다. Ansible 플레이 북은 내가 편집하는 유일한 파일이 아닙니다. 그래서 설치하려고하지도 않았습니다. 감사합니다. yml을 'ansible'유형으로 설정하겠습니다.
Glueon 2014

1
와우, 일반하지만 내 생각은 큰 차이를 만드는 yaml구문 가치뿐만 아니라 고정
akostadinov

사실,이 길을 가면 # vim:ft=ansible:모든 비 Ansible 파일을 넣어야합니다.
Elijah Lynn

162

콜론 뒤에 캐리지 리턴을 눌렀을 때 멋진 2 공백 YAML을 기본값으로 사용하기 위해 다음을 추가했습니다 .vimrc.

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

이것은 OP의 예상 결과에 대한 대시와도 잘 어울립니다.


2
감사합니다.
Gayan Weerakutti

4
~ / vim / ftplugin / yaml.vim에 넣고 향후 가독성을 위해 짧은 이름을 긴 이름으로 바꾸는 것을 고려하십시오.
exic

3
@LeviNoecker 네 단지 다음과 같이 구분 쉼표autocmd FileType yaml,yml setlocal ...
트레이 스타우트에게

2
이것이 작동하려면 filetype plugin indent on먼저해야했습니다. 또한 좋은 터치는 syntax on그 전에 갖는 것 입니다.
Elijah Lynn


20

:키 를 입력 할 때 다시 들여 쓰기를 비활성화 할 수 있습니다 .

:set indentkeys-=<:>

~/.vimrc파일을 편집 하고 다음 줄을 추가하십시오.

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

주 : autocmd 이후에 온다 filetype.


당신은 입력하여 reindent을 트리거 할 수 있습니다 CTRL-F삽입 예를 들어, 모드 :

hello: world
    foo: bar<C-F>

10

이 자동 명령을 사용하여 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

augroupyaml에 대한 내용은 다음과 같습니다 .

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 이 훌륭하게 작동하는 것을 발견했습니다 . yaml 파일의 들여 쓰기 (및 구문 강조)를 수행하는 vim 플러그인입니다. 설치하면 질문 한 특정 문제도 해결됩니다.

플러그인을 설치해야하며 (GitHub 리포지토리의 doco 참조) filetype=yaml들여 쓰기를 수정할 수만 있으면됩니다. 둘 다 도움이 될 것입니다

  1. 제공 한 스 니펫을 입력 할 때 또는
  2. yaml이 이미 작성되어있는 경우이를 선택 ( V라인 단위 선택의 경우 j또는 k더 많은 라인 선택) 한 다음 다음을 사용 하여 vim 형식을 트리거 할 수 있습니다.=
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.