按RETURN时将光标移动到括号和意图内

时间:2013-07-06 19:32:32

标签: emacs

让我们看看我是否能够解释它。当我在emacs 24中输入它时:

int foo() {|}

注意:| =光标

然后按Return键,我得到下一个输出:

int foo() {
|}

所以,我的问题是:我怎样才能实现下一个行为?

int foo() {
    |
}

2 个答案:

答案 0 :(得分:2)

而不是global-set-key你应该使用像(define-key 'c++-mode-map ...这样的东西,但这是基础知识。

(defun newline-and-push-brace ()
  "`newline-and-indent', but bracket aware."
  (interactive)
  (insert "\n")
  (when (looking-at "}")
    (insert "\n")
    (indent-according-to-mode)
    (forward-line -1))
  (indent-according-to-mode))

 (global-set-key (kbd "RET") 'newline-and-push-brace)

答案 1 :(得分:1)

你可以定义一个函数来检查你是否处于那种情况并且如果你想做你想做的事情,否则只是调用你的主要模式的换行命令,例如:

(defun brackets-newline (point)
  (interactive "d")
  (setq next-char (char-before point))
  (if (and next-char 
       (char-equal next-char 123))
      ;; if we are sitting in front of a close bracket, do what you want
      (progn
        (newline)
        (newline)
        (previous-line)
        ;;call whatever "TAB" is in this mode
        (funcall (key-binding (kbd "TAB"))))
    ;; otherwise just insert a newline 
    (newline)))

然后将其绑定到(kbd "RET")

使用defadvice或其他类似的方法可能有更好的方法,但这似乎对我来说非常好。