여러 개의 vim 접기 방법을 한 번에 사용하는 방법이 있습니까?


14

나는 foldmethod=indent~/.vimrc에서 설정했으며 일반적으로 저에게 효과적이며 그것을 유지하고 싶습니다.

그러나 내가 정기적으로 편집하고 독점적 통제하에있는 몇 가지 파일이 있습니다. 특히 마커 기반 시스템에 추가하고 싶습니다. 특히 파일을 열 때 큰 섹션을 드물게 (이미 들여 쓰기로 '구분 된') 미리 접혀 있습니다. 것 같습니다 foldmethod=marker제가 그렇게 할 수 것 (I가 필요한 경우 이러한 '사전 주름'을 내기 위해 파일의 이상한 코멘트를 상관하지 않습니다),하지만 난 여전히 원하는 foldmethod=indent내가 사용할 수 있도록 설정 zc, zo그래서 다음에에, 들여 쓰기로 섹션을 접거나 펼칩니다. 내가 알 수있는 한 foldmethod를 여러 값으로 설정할 수 없습니다.

내가 이것을 달성 할 수있는 다른 방법이 있습니까 (이상적으로 파일 자체에 포함 된 것을 사용 하는가)?


또한 마커의 접는 방법과 들여 쓰기를 동시에 수행하려고합니다. 또한 접기 표현을 사용하는 것이 최선의 방법이라고 생각합니다. 들여 쓰기와 마커 모두에 맞는 표현식을 찾았습니까?
Jp_

1
@Jp_ nope, '정확하지 않습니다.
Andrew Ferrier

답변:


10

은 자체 로컬 값을 가질 수 있습니다 'foldmethod'. 당신이 설정 한 ~/.vimrc것은 글로벌 기본값입니다. 특정 버퍼에 대해 다른 로컬 값을 설정하는 방법에는 여러 가지가 있습니다 .

  1. 수동으로 :setlocal foldmethod=marker
  2. 특정 파일 형식의 경우 (예 : Java 파일) : :autocmd FileType java setlocal foldmethod=marker(나 ~/.vim/after/ftplugin/java.vim)
  3. 특정 파일의 경우 : :autocmd BufRead /path/to/file setlocal foldmethod=marker
  4. 비아 파일 자체 내부 modeline 줄 (어쨌든 마커를 추가 할 필요가 있기 때문에, 나는이 선호) :

/* vim: set fdm=manual : */

아직 단 하나의 배 방법이있을 수 있습니다 하나의 창. 다른 전략을 사용하려면보다 유연한 방법 (예 :)을 선택하고 expr거기에있는 "기타"방법을 다시 구현해야합니다 (예 : 'foldexpr'들여 쓰기 고려). 또는 동일한 버퍼에 대해 두 개의 창 분할을 사용하고 각 분할에 대해 서로 다른 접기 방법을 설정하십시오.

아마도 당신이 듣고 싶은 것이 아니기 때문에 :autocmd CursorMoved현재 라인을 기반으로 foldmethod를 전환하는 것과 함께 무언가를 해킹 할 수 있습니다.

" Use markers when in the first 100 lines, else use indent.
:autocmd CursorMoved,CursorMovedI <buffer> let &l:foldmethod = (line('.') <= 100 ? 'manual' : 'indent')

1
감사. 그래서 이것은 버퍼 안에 foldmethod를 마커로 설정할 수 있다고 알려줍니다. 그러나 내가 찾고있는 것은 여전히 ​​들여 쓰기 foldmethod를 사용할 수있는 반면, 일부 섹션 ( 들여 쓰기 구분 됨)은 미리 접혀 있습니다. 내가 할 경우 (4) 위의, zc, zo, 등 더 이상 작동하지 않습니다에 그 버퍼에 의도 한대로. 내 질문을 명확하게했습니다.
Andrew Ferrier

명확하게 해주셔서 감사합니다. 내 답변을 수정했습니다.
Ingo Karkat

예, 확실하지 않으면 사과드립니다. foldexpr은 최선의 접근 방법처럼 들리지만 복잡합니다. 나는 그것을 시도 할 것이다. 포인터는 +1입니다.
Andrew Ferrier

다시 감사합니다. foldexpr을 작성하려고했고 여기에 관심이있을만한 관련 Q를 열었습니다 : superuser.com/questions/560167/…
Andrew Ferrier

@IngoKarkat : 아래 첫 번째 단락에서 버퍼 당 하나의 접는 방법 만있을 수 있다고 썼습니다 . 나는 그것이 창마다 되어야한다고 믿는다 .
garyjohn
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.