Saya menggunakan paket yang disebut yasnippet untuk sesuatu yang mirip dengan ini. Setelah beberapa perubahan kecil saya mengadaptasinya untuk menggunakan gaya Google docstring sebagai gantinya:

Namun perlu dicatat bahwa ini memerlukan beberapa pengaturan:
Cuplikan itu sendiri perlu menjalankan beberapa kode elisp utilitas untuk menghasilkan teks. Ini biasanya diselesaikan dengan membuat file yang disebut .yas-setup.eldengan kode di dalam python-modedirektori snippet. Namun dimungkinkan juga untuk menempatkan kode di suatu tempat di dalam Anda .emacssebagai gantinya.
Kode untuk cuplikan adalah:
# -*- mode: snippet -*-
# Insert Google style docstring and function definition.
# name: Python Google style Docstring
# key: defg
# type: snippet
# contributor: Xaldew
# --
def ${1:name}($2):
\"\"\"$3
${2:$(python-args-to-google-docstring yas-text t)}
${5:Returns:
$6
}
\"\"\"
${0:$$(let ((beg yas-snippet-beg)
(end yas-snippet-end))
(yas-expand-snippet
(buffer-substring-no-properties beg end) beg end
(quote ((yas-indent-line nil) (yas-wrap-around-region nil))))
(delete-trailing-whitespace beg (- end 1)))}
Kode untuk .yas-setup.elis:
(defun python-args-to-google-docstring (text &optional make-fields)
"Return a reST docstring format for the python arguments in yas-text."
(let* ((indent (concat "\n" (make-string (current-column) 32)))
(args (python-split-args text))
(nr 0)
(formatted-args
(mapconcat
(lambda (x)
(concat " " (nth 0 x)
(if make-fields (format " ${%d:arg%d}" (cl-incf nr) nr))
(if (nth 1 x) (concat " \(default " (nth 1 x) "\)"))))
args
indent)))
(unless (string= formatted-args "")
(concat
(mapconcat 'identity
(list "" "Args:" formatted-args)
indent)
"\n"))))
Catatan yang python-split-argsdisediakan oleh cuplikan standar . Yaitu:
https://github.com/AndreaCrotti/yasnippet-snippets/tree/master Namun Anda mendapatkannya secara default saat Anda menginstal paket melalui package.el.
Dengan pengaturan semuanya dengan benar, Anda harus dapat menulis "defg" diikuti oleh Tabuntuk memperluas cuplikan (Lihat gambar sebagai contoh).
Masih ada masalah dengan menggunakan indentasi bersarang di dalam ini, misalnya, di dalam kelas atau sebagai fungsi bersarang. Dalam kasus-kasus itu, docstring secara keliru diberi indentasi waktu tambahan untuk beberapa alasan. Saya akan memperbarui posting ini jika saya berhasil memperbaikinya.
Cuplikan sekarang harus bekerja di dalam lingkup lain dengan melarang yasnippetdari indentasi ekspansi kedua.