在spacemacs中插入一段代码的最佳方法是什么

时间:2017-09-20 23:20:52

标签: elisp 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的功能。

感谢您的帮助!

1 个答案:

答案 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