Каков рекомендуемый способ использования сворачивания Vim для кода Python - PullRequest
100 голосов
/ 11 декабря 2008

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

У кого-нибудь есть предпочтительный способ свертывания кода Python в Vim? Т.е.

  • У вас есть определенный плагин Vim, который вы используете и который вам нравится?
  • Используете ли вы ручное сворачивание или ставите маркеры в комментариях?
  • Есть ли другие рекомендуемые способы свертывания кода для Python в Vim?

Ответы [ 9 ]

103 голосов
/ 11 декабря 2008

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

nnoremap <space> za

vnoremap <space> zf

23 голосов
/ 12 декабря 2008

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

7 голосов
/ 26 ноября 2015

Еще один плагин для свертывания кода Python. Довольно просто, с обработкой строк документации и на GitHub:

SimpylFold

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

7 голосов
/ 11 декабря 2008

Python хорошо подходит для свертывания по отступам, немного для написания собственного кода. Я использую маркеры, так как они могут разбивать документ так, как вам нужно, и могут служить своего рода оглавлением. У меня есть это в моем 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>
5 голосов
/ 08 декабря 2009

Я думаю, что складывание отступов подходит для Python. Я делаю многоотраслевое git-репо для идей IDE vim-config python / django. Вилка прочь!

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

5 голосов
/ 11 декабря 2008

Мне действительно нравится плагин python_ifold .

4 голосов
/ 11 декабря 2008

Попробуйте этот плагин:

http://vim.sourceforge.net/scripts/script.php?script_id=515

2 голосов
/ 14 января 2014

Для меня идеальное сворачивание состоит в том, чтобы сложить только блоки class и def, складывание отступов - слишком много, на мой вкус. Я думаю, что одно изящное решение - использовать синтаксическую систему, подобную этой one , упомянутой Томасом. Однако этот файл предназначен для замены исходного файла синтаксиса, и он может перестать быть старше исходного (т. Е. В этом сценарии не упоминается синтаксис 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.

2 голосов
/ 07 января 2009

Исходный код Python поставляется с плагином синтаксиса vim вместе с настраиваемым файлом vimrc. Проверьте python FAQ по vim

...