답변:
개인적으로 나는 마커로 내 코드를 흩뿌 리도록 설득 할 수 없습니다. 나는 들여 쓰기 접기를 사용하는 데 꽤 익숙해졌습니다. 접기 열기 / 닫기 및 zR 및 zM 명령을위한 스페이스 바 매핑 (아래 참조)과 함께 저는 바로 집에 있습니다. Python에 적합합니다!
set foldmethod=indent
nnoremap <space> za
vnoremap <space> zf
set foldnestmax=2
. 이런 식으로 클래스의 메소드가 접히지 만 내부 진술은 그렇지 않습니다.
내가 사용 이 파이썬 구문 파일을. 접기 방법을 구문으로 설정하고 모든 클래스와 함수를 접습니다.
파이썬은 들여 쓰기로 접기에 적합하고, 내 자신의 코드를 작성하기 위해 비트를 사용합니다. 마커를 사용하여 원하는 방식으로 문서를 처리하고 일종의 목차 역할을 할 수 있습니다. 다른 사람의 코드를 볼 때 둘 사이를 전환하기 위해 vimrc에 이것을 가지고 있습니다.
#Toggle fold methods \fo
let g:FoldMethod = 0
map <leader>fo :call ToggleFold()<cr>
fun! ToggleFold()
if g:FoldMethod == 0
exe 'set foldmethod=indent'
let g:FoldMethod = 1
else
exe 'set foldmethod=marker'
let g:FoldMethod = 0
endif
endfun
#Add markers (trigger on class Foo line)
nnoremap ,f2 ^wywO#<c-r>0 {{{2<esc>
nnoremap ,f3 ^wywO#<c-r>0 {{{3<esc>
nnoremap ,f4 ^wywO#<c-r>0 {{{4<esc>
nnoremap ,f1 ^wywO#<c-r>0 {{{1<esc>
나는 들여 쓰기 접기가 파이썬에게는 괜찮다고 생각합니다. vim-config python / django IDE 아이디어를 위해 다중 분기 git repo를 만들고 있습니다. 멀리 포크!
나는 python_ifold
플러그인을 정말 좋아합니다 .
이 플러그인을 사용해보십시오 :
나에게 이상적인 폴딩은 class
및 def
블록 만 접는 것이고 , 들여 쓰기 폴딩은 제 취향에 맞지 않습니다. 나는 하나의 우아한 해결책은 다음과 같이 구문 시스템을 사용하는 것입니다 생각 하나 토마스에 의해 언급했다. 그러나 이것은 원본 구문 파일을 대체하기위한 것이며 원본보다 오래되어 끝날 수 있습니다 (즉, 해당 스크립트는 Python 3 구문을 언급하지 않음).
내 해결책은 위의 스크립트에서 가져온 중요한 줄로 ~/.vim/syntax
이름이 지정된 파일을 폴더 에 배치 하는 python.vim
것입니다.
syn match pythonDefStatement /^\s*\%(def\|class\)/
\ nextgroup=pythonFunction skipwhite
syn region pythonFunctionFold start="^\z(\s*\)\%(def\|class\)\>"
\ end="\ze\%(\s*\n\)\+\%(\z1\s\)\@!." fold transparent
hi link pythonDefStatement Statement
그런 다음 :set foldmethod=syntax
.
class
es 및 def
s 와 일치하지 않습니다 . 내가 거의 발현을 읽을 수 있기 때문에, 나는 일치하기 위해 그것을 조정할하려고 문제입니다 ^def
및 ^class
. 이후하지만이 호기심 \s*
이 잘 처리해야한다 ..
귀하의 .vimrc
:
set foldmethod=indent
set shiftwidth=4
그런 다음 zM
모두 마스킹하여 모두 zR
확장합니다. 또한 다음을 추가했습니다.
nnoremap <space> za
vnoremap <space> zf
map z1 :set foldlevel=0<CR><Esc>
map z2 :set foldlevel=1<CR><Esc>
map z3 :set foldlevel=2<CR><Esc>
map z4 :set foldlevel=3<CR><Esc>
map z5 :set foldlevel=4<CR><Esc>
map z6 :set foldlevel=5<CR><Esc>
map z7 :set foldlevel=6<CR><Esc>
map z8 :set foldlevel=7<CR><Esc>
map z9 :set foldlevel=8<CR><Esc>
당신이 할 수있는 지금 z1
과 z2
조금씩내어 작은합니다.
.vimrc 용으로 작성한이 작은 vim 스크립트가 정말 마음에 듭니다. alt+1
첫 번째 파이썬 들여 쓰기 수준 (클래스 정의 및 함수) alt+2
을 접고 두 번째 수준 (클래스 메서드)을 접고 alt+0
모든 것을 펼치도록 매핑 합니다 . 한 레벨 만 접고 중첩 된 하위 레벨은 접지 않습니다. za
현재 블록에 대한 접기를 전환 하는 데 계속 사용할 수 있습니다 . 참고있는 것을 ^[0
의이 ^[
입니다 alt
내 터미널. vim 스크립트에 대한 경험이 많지 않으니 함수에 대한 제안을 자유롭게 해주세요 :)
" Python folding
nnoremap ^[0 zR<CR>
nnoremap ^[1 :call Fold(0)<CR>
nnoremap ^[2 :call Fold(1)<CR>
function Fold(level)
:let b:max = a:level + 1
:set foldmethod=indent
:execute 'set foldnestmax='.b:max
:execute 'set foldlevel='.a:level
endfunction