PythonコードのVimでコードの折りたたみを有効にすることに興味があります。これを行うには複数の方法があります。
Python Vimでコードを折り畳むのに好ましい方法はありますか?
個人的には、コードでマーカーを散らかすように説得することはできません。私は、インデント折り畳みを使うことにかなり慣れています(そして効率的です)。折り畳みを開閉するためのスペースバー(以下を参照)とzRおよびzMコマンドのマッピングと合わせて、私は家にいます。 Pythonに最適!
nnoremap <space> za
vnoremap <space> zf
Pythonでは this 構文ファイルを使用します。折りたたみ方法を構文に設定し、すべてのクラスと関数を折りたたみますが、それ以外は何も折りたたみません。
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のマルチブランチgitリポジトリを作成していますIDE idea。Fork away!
このプラグインを試してください:
私にとって理想的な折り畳みは、class
ブロックとdef
ブロックのみを折り畳むことです。インデント折り畳みは、私の好みには多すぎます。エレガントな解決策の1つは、このような構文システムを使用することだと思います one 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
を使用して折りたたみを有効にします。
Pythonソースには、vim構文プラグインとカスタムvimrcファイルが付属しています。 python FAQ on vim