2010-07-09 2 views
9

YAML 형식의 텍스트 파일이 있고 VIM에 대한 사용자 정의 폴딩을 정의하고 싶지만 접는 방법에 대한 VIM 문서를 읽었음에도 불구하고 어떻게해야하는지 잘 모르겠습니다. 이 파일과 같이, YAML "문서"로 구성 :이 같은 것을보고 결과 접어 텍스트를 원하는YAML 항목을 VIM에서 어떻게 접을 수 있습니까?

--- 
title: My Title 
attr1: value1 
attr2: value2 
--- 
title: Next Item 
attr1: value3 
--- 
title: One More Item 
... 

:

+---- 2 lines: My Title ---- 
+---- ? lines: Next Item --- 

모든 제안은 감사합니다! 감사! 당신이 "수동"모든 시간 이외의 foldmethod를 사용하려면

답변

4

을 설명 예를 들어 당신이 있습니까 그것은 접어 것이다

--- 
title: My Title 
    other attrs: other values 
--- 
title: Next Item 
--- 
title: One More Item 
... 

에 입력을 변경하면 처음에 제목과 설명을 추가 할

%s/---\(.*\)\(\_.\{-}title: \)\(.*\)/---\1 #{{{1 \3\2\3/g 
set foldmethod=marker 

또는

%s/\(---\_.\{-}title: \)\(.*\)/#{{{1 \2\r\1\2/g 
set foldmethod=marker 

모든 YAML 문서의 사본과 유효 문서는 유효합니다. foldmarker 옵션은 변경하지 않아야합니다.

결과 : 접이식

1.

--- #{{{1 My Title 
title: My Title 
attr1: value1 
attr2: value2 
--- #{{{1 Next Item 
title: Next Item 
attr1: value3 
--- #{{{1 One More Item 
title: One More Item 
... 

: 접이식

+-- 4 строк: --- My Title----------------------------- 
+-- 3 строк: --- Next Item---------------------------- 
+-- 3 строк: --- One More Item------------------------ 

2.

#{{{1 My Title 
--- 
title: My Title 
attr1: value1 
attr2: value2 
#{{{1 Next Item 
--- 
title: Next Item 
attr1: value3 
#{{{1 One More Item 
--- 
title: One More Item 
... 

:

+-- 5 строк: My Title-------------------------------- 
+-- 4 строк: Next Item------------------------------- 
+-- 4 строк: One More Item--------------------------- 
+0

답변 해 주셔서 감사합니다!마커를 사용하는 방법이 명확하지 않아 문제가 해결되었습니다. 그러나 데이터를 복제하지 않기 위해 VIM이 자동으로 접기 레벨을 결정하기 위해 준 regexp를 제목과 함께 사용하는 방법이 있습니까? – wkranec

+0

@wkranec 적절한'foldexpr'과'foldtext'를 사용하여'foldmethod = expr'을 사용하여 끝낼 수 있다고 생각합니다. 그러나 결코 사용하지는 않았습니다. – ZyX

2

, 당신의 ~/.vimrc 파일에 다음 행을 추가합니다 : 내가 사용하는 것이 좋습니다 것입니다 foldmethod = foldoption


세트 foldmethod = 톱니 모양. 이것은 모든 들여 쓰기를 기준으로 폴드합니다. 그런 다음 접힌 부분을 들여 쓰기 할 입력을 변경하면됩니다. 당신이

+0

마지막 코멘트에 대해 죄송합니다. 나는 그렇게 새로워서 인라인 코드가 작동하지 않는다는 것을 알지 못했다. (나는 더 이상 어떤 이유로 편집 할 수 없다). – wkranec

+0

그래, 그건 내 잘못이야, 내가 원래의 입력을 잘못 읽었 어. 이미 중첩 된 관계가 있다고 생각했습니다. 대신 foldmethod = marker를 사용할 수 있습니다. 이것과 함께 set foldmarker = mmm, nnn을 사용할 수 있습니다. 여기서 mmm은 시작 마커이고 nnn은 끝 마커입니다. 그래서 나는 foldmarker = ---, --- (YAML에서 --- 접기를위한 OK 마커/delimeter라고 가정 함)를 시도 할 것입니다. 희망이 도움이됩니다. –

+0

다시 한번 감사드립니다, Eric. 앞에서 설명한 방법으로 마커 방법을 시도했지만, VIM은 전체 문서 (또는 문서의 중간에 접기를 만들려고하면 파일의 끝까지 모든 항목을 접습니다 (실제로는 닫히지 않기 때문에 "---") – wkranec

관련 문제