여러 개의 vim 접기 방법을 한 번에 사용하는 방법이 있습니까? 가지 파일이 있습니다. 특히

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

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

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



답변

은 자체 로컬 값을 가질 수 있습니다 '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')