回答:
個人的には、コードをマーカーで散らかすように自分を説得することはできません。私はインデント折りたたみを使用することにかなり慣れてきました(そして効率的です)。折りたたみの開閉とzRおよびzMコマンドへのスペースバーのマッピング(以下を参照)と共に、私は自宅にいます。Pythonに最適!
set foldmethod=indent
nnoremap <space> za
vnoremap <space> zf
set foldnestmax=2
、この方法でクラスのメソッドを折りたたみましたが、内部ステートメントは折りたたんでいません。
Pythonはインデントの折りたたみに適しています。独自のコードを書くのに少し適しています。マーカーを使用すると、ドキュメントを思い通りに切り詰めて、一種の目次として使用できます。他の人のコードを表示しているときに、これをvimrcに入れて2つを切り替えます。
#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>
インデントの折りたたみはpythonでは問題ないと思います。私はvim-config python / django IDEのアイデアのために多分岐のgitリポジトリを作成しています。フォークよ!
私はpython_ifold
プラグインが本当に好きです。
このプラグインを試してください:
私にとって理想的な折りたたみはclass
とdef
ブロックだけを折りたたむことです。インデント折りたたみは私の好みには多すぎます。エレガントな解決策の1つは、Tomasが言及したこのような構文システムを使用することだと思います。ただし、これは元の構文ファイルを置き換えるためのものであり、元の構文ファイルよりも古くなる可能性があります(つまり、そのスクリプトは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 and def
s 'とは一致しません。私はほとんどの式を読み込むことはできませんので、私は、一致させるために、それを微調整しようとして困っています^def
と^class
。以来けれどもこれは好奇心旺盛で\s*
これをうまく対処しなければならない。..
Pythonソースには、vim構文プラグインとカスタムvimrcファイルが付属しています。vimのpython FAQを確認してください
あなたの.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
、最初のPythonのインデントレベル(クラス定義や関数)を折るためにalt+2
第二レベル(クラスメソッド)を折り畳み、およびalt+0
展開]すべてのものに。これにより、1つのレベルのみが折りたたまれ、ネストされたサブレベルは折りたたまれません。を使用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