Vim で Python コードのコード フォールディングを有効にすることに興味があります。私はそうする方法が複数あることに気付きました。
Vim で Python コードの折りたたみを行うための好ましい方法はありますか? すなわち、
- お気に入りの Vim プラグインはありますか?
- 手動で折りたたむか、コメントにマーカーを配置しますか?
- Vim で Python のコードを折りたたむ他の推奨方法はありますか?
個人的には、自分のコードにマーカーを散らかすように自分を納得させることはできません。私はインデントフォールディングの使用にかなり慣れてきました(そして効率的になりました)。折り目を開く/閉じるためのスペースバー(以下を参照)のマッピングと、zRおよびzMコマンドと一緒に、私は家にいます。Pythonに最適です!
set foldmethod=indent
nnoremap <space> za
vnoremap <space> zf
この構文ファイルをPythonに使用します。フォールディングメソッドを構文に設定し、すべてのクラスと関数をフォールドしますが、それ以外はフォールドしません。
Python は、インデントで折り畳むのに適しています。また、自分のコードを書くのにも少し適しています。私はマーカーを使用します。マーカーを使用すると、ドキュメントを必要な方法で分割したり、一種の目次として機能したりできるからです。他の人のコードを表示しているときに 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>
python_ifold
私はプラグインが本当に好きです。
インデントの折り畳みは、Python では問題ないと思います。vim-config python/django IDE のアイデア用にマルチブランチ git リポジトリを作成しています。フォークアウェイ!
このプラグインを試してください:
Python ソースには、vim 構文プラグインとカスタム vimrc ファイルが付属しています。vim の python FAQ を確認してください
.vimrc 用に書いたこの小さな vim スクリプトが本当に気に入っています。alt+1
これは、最初の python インデント レベル (クラス定義と関数)alt+2
を折りたたみ、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