我有一个基本上插入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的功能。
感谢您的帮助!
答案 0 :(得分:1)
作为对第一个问题的回答,您可以使用yasnippet
和基于Spacemacs [1]提供的function
- 代码段的代码段为您执行此操作:
# -*- mode: snippet; require-final-newline: nil -*-
# name: my-function
# key: fn
# --
function () {
$0
};
如果您将此代码段放在~/.emacs.d/private/snippets/
中的新文件中,则可以通过键入fn
然后按 M - / [2]来展开它。如果将yas-indent-line
设置为'auto
(默认情况下在Spacemacs中),则该函数应正确缩进,并且代码段中的$0
会在插入后将光标置于该位置
yasnippet
- 扩展形成一个撤消操作。
[1]默认function
- 代码段可在~/.emacs.d/elpa/yasnippet-<VERSION>/snippets/js-mode
[2]使用默认的Spacemacs绑定,调用hippie-expand
,然后调用yas-expand
。