web-dev-qa-db-fra.com

Quelle est la façon recommandée d'utiliser le pliage Vim pour Python

Je souhaite activer le pliage de code dans Vim pour Python. J'ai remarqué plusieurs façons de le faire.

Quelqu'un at-il une façon préférée de faire Python pliage de code dans Vim? I.e,

  • Avez-vous un plugin Vim particulier que vous utilisez et aimez?
  • Utilisez-vous le pliage manuel ou placez-vous des marqueurs dans les commentaires?
  • D'autres façons recommandées de faire du pliage de code pour Python dans Vim?
102
Paul D. Eden

Personnellement, je ne peux pas me convaincre de salir mon code avec les marqueurs. Je suis devenu assez habitué (et efficace) à utiliser le pliage en retrait. Avec mon mappage de la barre d'espace (voir ci-dessous) pour ouvrir/fermer les plis et les commandes zR et zM, je suis chez moi. Parfait pour Python!

nnoremap <space> za

vnoremap <space> zf

105
Walter

J'utilise ce fichier de syntaxe pour Python. Il définit la méthode de pliage sur la syntaxe et plie toutes les classes et fonctions, mais rien d'autre.

23
Tomas

Encore un autre plugin pour plier Python. Plutôt simple, manipulant les docstrings, et sur le GitHub:

SimpylFold

Prendre plaisir!

8
iago-lito

Python est bien adapté pour le pliage en retrait, un peu pour écrire mon propre code.J'utilise des marqueurs car ils peuvent crunch un document comme vous le souhaitez et peuvent servir comme une sorte de table des matières. J'ai ceci dans mon vimrc pour basculer entre les deux quand je regarde le code de quelqu'un d'autre.

#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>
7
Michael

Je pense que le pliage en retrait est très bien pour python. Je fais un dépôt git multi-branches pour vim-config python/Django IDE ideas. Fork away!

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

5
Skylar Saveland

J'aime vraiment le python_ifold plugin .

5
Nick Presta
4
Oli

Pour moi, le pliage idéal consiste à plier uniquement les blocs class et def, le pliage en retrait est trop à mon goût. Je pense qu'une solution élégante consiste à utiliser le système de syntaxe comme celui-ci n mentionné par Tomas. Cependant, celui-ci est destiné à remplacer le fichier de syntaxe d'origine et il peut finir par être plus ancien que l'original (c'est-à-dire que le script ne mentionne pas Python 3 syntaxe).

Ma solution est de placer dans le ~/.vim/syntax dossier un fichier nommé python.vim avec juste les lignes importantes (tirées du script ci-dessus):

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

Activez ensuite simplement le pliage avec :set foldmethod=syntax.

3
Genma

La source Python est livrée avec un plugin de syntaxe vim avec un fichier vimrc personnalisé. Vérifiez le python FAQ sur vim

2
ONODEVO