vim의 여러 foldmethods


9

vim 의 접기 옵션을 꽤 많이 사용하며 일반적으로 foldmethod 를 구문 으로 설정 했습니다 . 최근에 나는 내가의 전체 블록을 넣을 수 있도록, 사용자 정의 주름을 추가 할 수 있다는 것을 발견 /*{{{*/하고 /*}}}*/소스 파일 함께 많은 부분을 그룹화하는 데 매우 유용하다. 그러나이 기능을 사용하려면 foldmethod를 마커로 설정해야하며 구문 접기가 느슨합니다.

vim에서 동시에 두 개의 활성 foldmethods를 사용할 수 있습니까? set foldmethod=syntax,marker작동하지 않습니다.

답변:


4

아니요, 엄밀히 말하면 Vim에서 동시에 여러 개의 foldmethod를 활성화 할 수는 없습니다.

구문 강조 규칙을 작성하는 방법을 배우고 마커 접는 에뮬레이션을 추가하려는 언어의 강조 파일을 해킹하려는 경우 마커 기반 폴딩을 에뮬레이션 할 수 있습니다. 그렇게하는 데는 몇 가지 단점이 있습니다.

  1. foldmethod가 "syntax"로 설정되어 있으면 마커 및 수동 접기 방법으로 작동하는 접기 ( "zf", "zd"등)를 작성 / 제거하는 명령이 작동하지 않습니다.

  2. 폴드 레벨을 1 씩 증가 / 감소시키는 것과 반대로 폴드 레벨을 "강제"하는 마커 (예 : " {{{1"/ " }}}1") (예 : " {{{"/ " }}}")는 문제가 있습니다. 접기 수준 번호를 완전히 무시하거나 구문 기반의 접기 규칙을 방해하거나 중단 할 가능성이 있습니다.

마커 기반 폴딩이 필요한 경우 해당 방법을 완전히 사용하는 것이 좋습니다. 약간의 시간과 노력이 필요할 수 있지만, 실제로 유연성이 필요한 경우, 특히 두 가지를 결합하려는 시도를 고려할 때 가치가있을 수 있습니다.


2

나는 똑같은 것을 찾고 있었다. 구문 파일을 해킹하고 싶지 않기 때문에 대신 foldmethods 사이를 전환하는 매핑이 있습니다. 지금은 구문과 마커 만 전환합니다.

nmap <Leader>ff :call <SID>ToggleFold()<CR>
function! s:ToggleFold()
    if &foldmethod == 'marker'
        let &l:foldmethod = 'syntax'
    else
        let &l:foldmethod = 'marker'
    endif
    echo 'foldmethod is now ' . &l:foldmethod
endfunction
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.