3

我正在使用 Emacs。当我写这篇文章时,我想要那个(| 是重点):

for (int i=0; i<n; i++) {|

然后我按 Enter (或其他键,无论如何),我得到了这个:

for (int i=0; i<n; i++) {
   |
}

所以我可以立即开始输入块的内容,块会自动关闭。

我怎样才能做到这一点?

4

2 回答 2

3

这是我的 C/C++ 设置,可以解决您的问题:

(defun ins-c++-curly ()
  "Insert {}.
Threat is as function body when from endline before )"
  (interactive)
  (if (looking-back "\\()\\|try\\|else\\|const\\|:\\)$")
      (progn
        (insert " {\n\n}")
        (indent-according-to-mode)
        (forward-line -1)
        (indent-according-to-mode))
    (insert "{}")
    (backward-char)))

(add-hook 'c-mode-common-hook 'my-c-common-hook)

(defun my-c-common-hook ()
  (define-key c-mode-base-map "{" 'ins-c++-curly))

这是yasnippetfor

# -*- mode: snippet -*-
#name : for (...; ...; ...) { ... }
# --
for (unsigned int ${1:i}=0; $1<${2:N}; ++$1)$0

请注意,该代码段不使用花括号,因此我可以决定是需要它们还是只需要一个语句。

只是为了向您展示将我从零引导到您问题中的代码的键序列:for C-o C-o C-o {.

于 2014-03-01T13:03:51.030 回答
1

如果您想自动关闭字符,M-x electric-pair-mode可能会很有用(需要 Emacs 版本 24 或更高版本)。只需尝试一下,看看它是否符合您的需求。

自动配对

我认为下面也可能会有所帮助。

在括号对后将 Emacs 设置为智能自动行?

于 2014-03-02T09:12:41.800 回答