Yo uso el paquete llamado yasnippet para algo similar a esto. Después de algunos cambios menores, lo adapté para usar el estilo de Google Docstring:

Sin embargo, tenga en cuenta que requiere cierta configuración:
El fragmento en sí necesita ejecutar algún código de utilidad elisp para generar el texto. Esto generalmente se resuelve creando un archivo llamado .yas-setup.elcon el código dentro del python-modedirectorio de fragmentos. Sin embargo, también es posible colocar el código en algún lugar dentro de su .emacslugar.
El código para el fragmento es:
# -*- 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)))}
El código para el .yas-setup.eles:
(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"))))
Tenga en cuenta que python-split-argslo proporcionan los fragmentos estándar . Es decir:
https://github.com/AndreaCrotti/yasnippet-snippets/tree/master Sin embargo, los obtiene de forma predeterminada cuando instala el paquete package.el.
Con todo configurado correctamente, debería poder escribir "defg" seguido de Tabexpandir el fragmento (vea la imagen para ver un ejemplo).
Todavía hay un problema con el uso de esta sangría anidada, por ejemplo, dentro de clases o como funciones anidadas. En esos casos, la cadena de documentos se sangra erróneamente un tiempo extra por alguna razón. Actualizaré esta publicación si logro arreglar eso.
El fragmento ahora debería funcionar dentro de otros ámbitos al prohibir yasnippetla sangría automática de la segunda expansión.