Каков рекомендуемый способ использования Vim folding для кода Python

Мне интересно включить фальцовку кода в Vim для кода Python. Я заметил несколько способов сделать это.

Есть ли у кого-нибудь предпочтительный способ сделать код Python в Vim? I.e,

  • У вас есть специальный плагин Vim, который вы используете и как?
  • Вы используете ручную фальцовку или помещаете маркеры в комментарии?
  • Любые другие рекомендуемые способы выполнения сворачивания кода для Python в Vim?

Ответ 1

Лично я не могу убедить себя помешать моему коду маркерами. Я привык к (и эффективному) при использовании отступов. Вместе с моим отображением пробела (см. Ниже), чтобы открывать/закрывать складки и команды zR и zM, я дома. Идеально подходит для Python!

nnoremap <space> za

vnoremap <space> zf

Ответ 2

Я использую этот файл синтаксиса для Python. Он устанавливает метод сгибания в синтаксис и сбрасывает все классы и функции, но ничего больше.

Ответ 3

Python хорошо подходит для складывания по отступу, бит для написания моего собственного кода. Я использую маркеры, так как они могут хрустнуть документ так, как вы хотите, и могут служить своего рода оглавлением. У меня есть это в моем vimrc, чтобы перевернуть между ними, когда я просматриваю какой-то код elses.

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

Ответ 5

Я думаю, что сложение отступа отлично подходит для python. Я делаю многоразветвленную репо для wm-config python/django IDE. Убирайся!

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

Ответ 7

Еще один плагин для складывания кода Python. Скорее просто, обрабатывая docstrings, и на GitHub:

SimpylFold

Наслаждайтесь!

Ответ 9

Для меня идеальная складка состоит в том, чтобы сложить только блоки class и def, отступы с отступом слишком много для моего вкуса. Я думаю, что одним из элегантных решений является использование синтаксической системы, такой как один, упомянутый Томасом. Тем не менее, это предназначено для замены исходного файла синтаксиса, и оно может закончиться старше исходного (т.е. Что script не упоминает синтаксис Python 3).

Мое решение состоит в том, чтобы поместить в папку ~/.vim/syntax файл с именем python.vim только с важными строками (взятыми из вышеприведенного script):

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.