在 spacemacs 中插入代码片段的最佳方法是什么
What is the best way to insert a snippet of code in spacemacs
我有一个函数,它基本上插入 function () {};
但正确缩进并且光标定位正确:
(defun insert-function-js ()
(insert "function () {
};"))
(define-key evil-normal-state-map (kbd "SPC dg")
(lambda ()
(interactive)
(call-interactively 'evil-insert)
(insert-function-js)
(evil-force-normal-state)
(call-interactively 'evil-visual-char)
(call-interactively 'evil-previous-line)
(call-interactively 'indent-region)
(call-interactively 'evil-open-below)))
这看起来很麻烦。我想有更好的方法来编写这个功能!更好地利用 elisp 功能的一种。
感谢您的帮助!
作为第一个问题的答案,您可以使用 yasnippet
和基于 Spacemacs [1] 提供的 function
片段的片段来为您完成此操作:
# -*- mode: snippet; require-final-newline: nil -*-
# name: my-function
# key: fn
# --
function () {
[=10=]
};
如果您将此片段放入 ~/.emacs.d/private/snippets/
中的新文件中,您可以通过键入 fn
然后按 M-/ [2 ].如果 yas-indent-line
设置为 'auto
(在 Spacemacs 中默认设置),那么函数应该正确缩进,代码段中的 [=17=]
在插入后将光标置于该位置.
yasnippet
-扩展形成一个单一的撤消操作。
[1] 默认的 function
片段可以在 ~/.emacs.d/elpa/yasnippet-<VERSION>/snippets/js-mode
中找到
[2] 使用默认的 Spacemacs 绑定,这会调用 hippie-expand
,后者又会调用 yas-expand
.
我有一个函数,它基本上插入 function () {};
但正确缩进并且光标定位正确:
(defun insert-function-js ()
(insert "function () {
};"))
(define-key evil-normal-state-map (kbd "SPC dg")
(lambda ()
(interactive)
(call-interactively 'evil-insert)
(insert-function-js)
(evil-force-normal-state)
(call-interactively 'evil-visual-char)
(call-interactively 'evil-previous-line)
(call-interactively 'indent-region)
(call-interactively 'evil-open-below)))
这看起来很麻烦。我想有更好的方法来编写这个功能!更好地利用 elisp 功能的一种。
感谢您的帮助!
作为第一个问题的答案,您可以使用 yasnippet
和基于 Spacemacs [1] 提供的 function
片段的片段来为您完成此操作:
# -*- mode: snippet; require-final-newline: nil -*-
# name: my-function
# key: fn
# --
function () {
[=10=]
};
如果您将此片段放入 ~/.emacs.d/private/snippets/
中的新文件中,您可以通过键入 fn
然后按 M-/ [2 ].如果 yas-indent-line
设置为 'auto
(在 Spacemacs 中默认设置),那么函数应该正确缩进,代码段中的 [=17=]
在插入后将光标置于该位置.
yasnippet
-扩展形成一个单一的撤消操作。
[1] 默认的 function
片段可以在 ~/.emacs.d/elpa/yasnippet-<VERSION>/snippets/js-mode
[2] 使用默认的 Spacemacs 绑定,这会调用 hippie-expand
,后者又会调用 yas-expand
.