Uczyń akapit wypełnienia w Pythonie napisanym w Pythonie, zostawiając potrójne cudzysłowy w osobnej linii


16

Wpisuję tekst w Pythonie w jednym wierszu, takim jak ten:

"""
This is a long docstring. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec a diam lectus. Sed sit amet ipsum mauris. Maecenas congue ligula ac quam viverra nec consectetur ante hendrerit. Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean ut gravida lorem. Ut turpis felis, pulvinar a semper sed, adipiscing id dolor. Pellentesque auctor nisi id magna consequat sagittis.
"""

a następnie uderzyłem Mq ( fill-paragraph) i otrzymuję to:

"""This is a long docstring. Lorem ipsum dolor sit amet, consectetur
adipiscing elit. Donec a diam lectus. Sed sit amet ipsum
mauris. Maecenas congue ligula ac quam viverra nec consectetur ante
hendrerit. Donec et mollis dolor. Praesent et diam eget libero egestas
mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem
lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non
tortor. Lorem ipsum dolor sit amet, consectetur adipiscing
elit. Aenean ut gravida lorem. Ut turpis felis, pulvinar a semper sed,
adipiscing id dolor. Pellentesque auctor nisi id magna consequat
sagittis.

"""

Mam z tym dwa problemy:

  1. Dokumenty zaczynają się od tej samej linii, co """- Wolałbym, aby potrójny cytat pozostawał na swojej linii.
  2. (Znacznie niższy priorytet.) Dokumentacja kończy się pustą linią.

Powyższy przykład jest wymyślony, ale często się z tym spotykam, szczególnie podczas edycji istniejących dokumentów, w których chciałbym po prostu M-qi przepuścić cały para.

Odpowiedzi:


15

Dostosuj python-fill-docstring-styleodpowiednio, zakładając, że używasz wbudowanego trybu Python w Emacs 24.4. Domyślnie jest to pep-257, co prowadzi do obserwowanego stylu, tj. Brak nowej linii na początku i dwie nowe linie przed końcem dokumentu.

Zmień tę zmienną na symmetriclub, djangoaby Tryb Python był zgodny z preferowanym stylem, tj. Nowa linia na początku dokumentu i nowa linia przed końcem:

(setq python-fill-docstring-style 'django)

Możesz też ustawić go za pomocą Zmiennych katalogu , aby skonfigurować styl dokumentów indywidualnie dla każdego projektu.

symmetrici djangosą różnymi tekstami jednowierszowymi wrt. Pierwszy z nich umieszcza potrójne cytaty w tym samym wierszu, jeśli docstring pasuje do jednej linii, podczas gdy drugi umieszcza potrójne cytaty w osobnych wierszach w tym przypadku.

Spójrz na dokument,python-fill-docstring-style aby zobaczyć wszystkie dostępne opcje.


-1

Wpisz pustą linię na końcu, wygląda jak zwykły błąd, zgłoś to za pomocą M-x report-emacs-bug. Ale w przypadku pierwszego elementu nie jestem pewien, czy jest to błąd, czy funkcja, więc możesz wspomnieć o tym w swoim raporcie o błędzie, ale być może odpowiedź będzie taka, że ​​postępuje on zgodnie z konwencją „PEP-NNN”.

To powiedziawszy, możesz być w stanie rozwiązać pierwszy problem z następującymi:

(add-hook 'python-mode-hook
          (lambda ()
            (set (make-local-variable 'paragraph-separate)
                 (concat paragraph-separate "\\|^[ \t]*\"\"\"[ \t]*$"))))

1
To nie jest błąd, ani nie powinieneś go zmieniać paragraph-separate. Styl docstring python.elmożna dostosować.
lunaryorn

Wow, nigdy bym nie przypuszczał, że dodatkowy pusty wiersz na końcu dokumentacji może być wymuszony przez standard.
Stefan

1
Standard (PEP 257) tak naprawdę tego nie wymusza, jest to tylko (powszechna) interpretacja tego. Emacs obsługuje również wariant bez nowej linii, jak pep-257-nnw python-fill-docstring-style.
lunaryorn

1
Jak na ironię, przyczyną tego pustego linku jest: Jeśli cały docstring nie mieści się w linii, umieść cytaty zamykające same w linii. W ten sposób można na nim użyć polecenia wypełniania akapitu Emacsa.
Felipe,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.