source

Python 코드용 Vim 폴딩을 사용하는 권장 방법은 무엇입니까?

ittop 2023. 8. 25. 23:58
반응형

Python 코드용 Vim 폴딩을 사용하는 권장 방법은 무엇입니까?

Vim for Python 코드에서 코드 폴딩을 활성화하는 데 관심이 있습니다.나는 그렇게 하는 여러 가지 방법을 알아챘습니다.

빔에서 파이썬 코드 폴딩을 할 수 있는 선호하는 방법이 있습니까?예,

  • 당신이 사용하고 좋아하는 특정 Vim 플러그인이 있습니까?
  • 수동 접기를 사용합니까, 아니면 주석에 마커를 배치합니까?
  • Vim에서 Python에 대해 코드 폴딩을 할 수 있는 다른 추천 방법이 있습니까?

개인적으로 저는 제 코드를 마커와 함께 버리라고 확신할 수 없습니다.저는 들여쓰기 접기에 꽤 익숙해지고 효율적이 되었습니다.접기/닫기 스페이스 바(아래 참조) 매핑과 zR 및 zM 명령을 함께 사용하면 바로 집에 있습니다.Python에 완벽합니다!

set foldmethod=indent
nnoremap <space> za
vnoremap <space> zf

스페이스 바를 매핑하여 일반 모드에서 현재 들여쓰기된 폴드를 열거나 닫습니다.또한 스페이스바를 매핑하여 시각적 모드에서 수동으로 접기를 만듭니다.그러나 접기 방법이 들여쓰기로 설정되어 있으면 이 방법이 작동하지 않으므로 그 목적은 알 수 없습니다.

저는 이 구문 파일을 파이썬에 사용합니다.접기 방법을 구문으로 설정하고 모든 클래스와 함수를 접지만 다른 것은 접지 않습니다.

Python 코드를 접기 위한 또 다른 플러그인.GitHub에서 문서 문자열을 다루는 것은 매우 간단합니다.

단순 접기

맛있게 드세요!

Python은 들여쓰기 시 접기에 매우 적합하며, 나만의 코드를 작성하기 위한 비트입니다. 나는 마커를 사용합니다. 왜냐하면 마커는 문서를 원하는 방식으로 자를 수 있고 일종의 목차 역할을 할 수 있기 때문입니다.다른 사람이 코드를 보고 있을 때 둘 사이를 전환할 수 있는 기능이 있습니다.

#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 아이디어를 위한 멀티 브랜치 깃 레포를 만들고 있습니다.포크 어웨이!

http://github.com/skyl/vim-config-python-ide

플러그인이 정말 마음에 들어요.

이 플러그인을 사용해 보십시오.

http://vim.sourceforge.net/scripts/script.php?script_id=515

당신의.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조금씩 썩지 않게 하기 위해서요.

나에게 이상적인 접기는 단지 접기입니다.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.

Python 소스는 사용자 지정 vimrc 파일과 함께 vim 구문 플러그인과 함께 제공됩니다.vim에서 파이썬 FAQ를 확인하십시오.

위해 쓴 이 .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

@Genma의 답변을 기반으로 다음 구문 규칙을 접착제로 붙였습니다. 이 규칙은 다음과 같이 추가하면 됩니다..vim/after/syntax/python.vim

syn keyword pythonStatement class def
syn match pythonFunction "\h\w*" containedin=pythonFold
syn region  pythonFold  fold transparent
      \ start = "\(^\z(\s*\)\v%(def|class|if|elif|else|for|while|try|except|finally|with)>)@<="
      \ end   = "\v\ze%(\s*\n)+%(\z1\s)@!."

syn region pythonCurlyBrace start="{" end="}" fold transparent
syn region pythonSquareBrace start="\[" end="\]" fold transparent

언급URL : https://stackoverflow.com/questions/357785/what-is-the-recommended-way-to-use-vim-folding-for-python-code

반응형