Как свернуть длинные docstrings в исходном коде Python в VIM?

Кто-либо знает о методе или возможно плагине, который автоматически свернет длинные docstrings в Python? У меня есть docstrings в моем коде, которые охватывают несколько страниц, таким образом, это неприятно, чтобы продолжать пролистывать их. Другая хитрая часть - то, что существует встроенный Python, тестирующий код в docstrings, так, чтобы мог бы сделать парсинг их трудным. Обратите внимание, что я только должен автоматически свернуть весь docstring, независимо от того, что находится в нем.

9
задан Blaszard 10 June 2018 в 07:44
поделиться

4 ответа

Это немного грязный прием, но вы можете просмотреть файл синтаксиса Python (: sp $ VIMRUNTIME / syntax / python.vim ) и найти все области синтаксиса для строк в тройных кавычках. (найдите '' ' и "" ") и добавьте ключевое слово fold в конец этих операторов. Затем просто установите foldmethod = syntax для файлов Python и комментарии должны быть свернуты.

8
ответ дан 3 November 2019 в 00:58
поделиться

Я не уверен насчет плагина или автоматизации, но если вы наберете zf / , вы сможете найти что-то, и оно будет свернуто до следующего экземпляра. . Итак, в документе, подобном следующему (где [] - курсор):

def foo():
    """[]
    Some long docstring
    that takes up many
    lines
    """
    pass

Сначала посмотрите на edit2, чтобы увидеть обновленную строку поиска!

Если вы используете команду zf / "" "[ENTER] , она должна свернуть все от текущей строки (начало строки документации) до следующего появления " "" , который должен быть концом строки документации.

Я знаю, что это не автоматизация, но, возможно, это поможет тем временем или приведет вас к правильному пути к автоматизации. См. Edit2 для лучшей функции поиска, хотя я все еще не знаю, как автоматизировать.

Надеюсь, это поможет.

Изменить : в результате вы можете искать любую строку документации с помощью / "" "\ _. \ {-}" "" , хотя это также вернет код в строке документации . Чтобы найти определение функции, за которым следует строка документации, вы можете использовать / def \ _. \ {-} "" "\ _. \ {-}" "" , хотя это нарушает определение внутри строка документации.

Edit2 : На самом деле, еще немного поигравшись с регулярными выражениями, я пришел к следующему: / def. \ {-}): \ _ s * "" "\ _. \ {-}" "" , который должен найти любую функцию, за которой следует строка документации. Он ищет def , за которым следуют любые символы, затем ): , за которым следует новая строка и / или пробел, за которым следует "" ", за которым следует любое количество строк, чем следующая "" ", но всегда гарантирует, что вторая тройная кавычка находится сразу после первой.

2
ответ дан 3 November 2019 в 00:58
поделиться

В вашем .vimrc добавьте:

" folding
set foldmethod=indent

Это будет автоматически сворачиваться при каждом отступе, который в Python преобразуется в строки документации. Работает ОЧЕНЬ-ОЧЕНЬ красиво. Попробуйте. Приведенный выше ответ верен, но требует нескольких нажатий клавиш (мля!)

1
ответ дан 3 November 2019 в 00:58
поделиться

Вы можете сделать это с помощью : set foldmethod = marker foldmarker = "" "," "" , я думаю. Я не тестировал его, но это должно помочь. Аргументы для foldmarker - это маркеры начала и конца.

0
ответ дан 3 November 2019 в 00:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: