Tạo đoạn văn bản trong chuỗi python để lại dấu ngoặc kép trên dòng riêng


16

Tôi gõ một chuỗi python tất cả trên một dòng như thế này:

"""
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.
"""

và sau đó tôi nhấn Mq ( fill-paragraph) và tôi nhận được điều này:

"""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.

"""

Tôi có hai vấn đề với điều này:

  1. Chuỗi doc bắt đầu trên cùng một dòng với """- Tôi muốn có ba trích dẫn ở trên dòng riêng của nó.
  2. (Ưu tiên thấp hơn nhiều.) Chuỗi doc kết thúc bằng một dòng trống.

Ví dụ ở trên là có thể, nhưng tôi thường xuyên gặp phải vấn đề này, đặc biệt là khi chỉnh sửa các tài liệu hiện có, nơi tôi muốn đơn giản M-qvà có toàn bộ đoạn para được chỉnh lại.

Câu trả lời:


15

Tùy chỉnh python-fill-docstring-stylephù hợp, giả sử rằng bạn đang sử dụng Chế độ Python tích hợp trong Emacs 24.4. Mặc định là pep-257, dẫn đến phong cách bạn quan sát, tức là không có dòng mới nào ở đầu và hai dòng mới trước khi kết thúc một chuỗi.

Thay đổi biến này thành symmetrichoặc djangođể Chế độ Python tuân theo kiểu ưa thích của bạn, tức là một dòng mới ở đầu chuỗi, và một dòng mới trước khi kết thúc:

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

Hoặc, đặt nó thông qua Biến thư mục , để định cấu hình kiểu chuỗi doc theo từng dự án.

symmetricdjangolà các tài liệu đơn dòng wrt khác nhau. Cái trước đặt dấu ngoặc kép trên cùng một dòng nếu một chuỗi doc khớp với một dòng, trong khi cái sau đặt dấu ngoặc kép trên các dòng riêng biệt trong trường hợp này.

Hãy nhìn vào chuỗi docpython-fill-docstring-style để xem tất cả các tùy chọn có sẵn.


-1

Viết dòng trống ở cuối, nó trông giống như một lỗi đơn giản, vui lòng báo cáo với M-x report-emacs-bug. Nhưng đối với phần tử đầu tiên, tôi không chắc đó là lỗi hay tính năng, vì vậy bạn có thể muốn đề cập đến nó trong báo cáo lỗi của mình, nhưng có lẽ câu trả lời sẽ là nó chỉ tuân theo quy ước "PEP-NNN".

Điều này cho biết, bạn có thể khắc phục sự cố đầu tiên bằng cách sau:

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

1
Đó không phải là một lỗi, bạn cũng không cần phải thay đổi paragraph-separate. Phong cách docopes python.ellà tùy biến.
lunaryorn

Ồ, tôi chưa bao giờ đoán được rằng một dòng trống thừa ở cuối chuỗi doc có thể là thứ được thi hành theo tiêu chuẩn.
Stefan

1
Tiêu chuẩn (PEP 257) không thực sự thực thi điều này, nó chỉ là một cách giải thích (phổ biến) về nó. Emacs cũng hỗ trợ các biến thể mà không có một dòng mới, như pep-257-nntrong python-fill-docstring-style.
lunaryorn

1
Trớ trêu thay, lý do cho liên kết trống là: Trừ khi toàn bộ chuỗi tài liệu khớp với một dòng, hãy tự đặt dấu ngoặc kép trên một dòng. Bằng cách này, lệnh điền đoạn của Emacs có thể được sử dụng trên nó.
Felipe
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.