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

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에서 필요한 것은 아닙니다. 두 개의 값으로 배열을 만들고 싶습니다.

어떻게 고칠까요?



답변

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

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

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


답변

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

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

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


답변

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

:set indentkeys-=<:>

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

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

주 : autocmd 이후에 온다 filetype.


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

hello: world
    foo: bar<C-F>


답변

이 자동 명령을 사용하여 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 개의 공백을 사용하십시오.
  • 탭 대신 공백을 사용하십시오.
  • #의 시작 부분에 주석 문자 ( ) 또는 콜론 을 삽입 한 후 줄 다시 들여 쓰기를 건너 뜁니다 .


답변

YAML에 주석을 추가하여이 파일에 대한 Vim 특수 구성을 알릴 수 있습니다. 예를 들면 :

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

그러면 기본 vim과 함께이 파일을 사용하는 모든 사람이 파일 작성자의 구성을 공유 할 수 있습니다. 특히 협력 할 때 잘 작동합니다.


답변

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


답변

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

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

  1. 제공 한 스 니펫을 입력 할 때 또는
  2. yaml이 이미 작성되어있는 경우이를 선택 ( V라인 단위 선택의 경우 j또는 k더 많은 라인 선택) 한 다음 다음을 사용 하여 vim 형식을 트리거 할 수 있습니다.=