【问题标题】:Emacs auto compelete paren, indent and new line - how to?Emacs 自动完成括号、缩进和换行 - 如何?
【发布时间】:2011-07-08 22:23:39
【问题描述】:

在 C 中 - 我希望当我输入 { 然后 } 时,emacs 将在它们之间插入一个新行,然后将光标设置在它们之间。例如:

int main() {

现在我输入 } 会发生以下情况:

int main() 
{
    //cursor is here
}

编辑:忘了提及 - 我希望 emacs 知道,在定义一个函数时,它应该执行上述操作,但在执行 for 循环或 if 语句时,我希望它执行以下操作:

if (bla bla) {

输入 } 和...:

if (bla bla) {
     //cursor here
}

【问题讨论】:

  • 删除了c 标签。您的问题是关于配置编辑器(编写 C 代码)。

标签: emacs autocomplete


【解决方案1】:

如果您不介意该行为将与您描述的方式差不多,但不完全是您所描述的方式,那么有一种内置方法可以做到这一点。这是自动换行功能,可以使用组合键C-c C-a 或您的 .emacs 中的这一行来激活:

(c-toggle-auto-newline 1)

不同之处在于它会在输入左大括号 { 后立即进行重新格式化。当你最终输入右大括号时,它也会以正确的方式缩进。

您还需要设置正确的 CC 模式样式。样式“cc-mode”似乎以您描述的方式定义事物。您可以使用组合键C-c . 激活它,然后选择 cc-mode 或 .emacs 行

(c-set-style "cc-mode")

c 模式函数是自动加载的,因此在加载 .emacs 文件时通常不可用。因此,您应该将它们包装在 c 模式的钩子中,像这样

(add-hook 'c-mode-hook
          (lambda ()
            (c-toggle-auto-newline 1)
            (c-set-style "cc-mode")))

【讨论】:

    【解决方案2】:

    至于{ 的东西:

    (define-minor-mode c-helpers-minor-mode
      "This mode contains little helpers for C developement"
      nil
      ""
      '(((kbd "{") . insert-c-block-parentheses))
    )
    
    (defun insert-c-block-parentheses ()
      (interactive)
      (insert "{")
      (newline)
      (newline)
      (insert "}")
      (indent-for-tab-command)
      (previous-line)
      (indent-for-tab-command)
      )
    

    将以上内容粘贴到您的.emacs。您可以使用c-helpers-minor-mode 激活它。

    编辑:上面的内容只需按{ 即可插入所有内容。如果您输入{},下面的脚本应该会执行此操作:

    (defun insert-latex-brackets (opening closing)                      ; prototype function for all enclosing things
      (interactive)
      (insert opening)
      (insert "  ")
      (insert closing)
      (backward-char (+ 1 (length closing )))
      )
    
    (defun check-char-and-insert (char opening closing)
      (interactive)
      (if (equal char (char-to-string (char-before (point))))
          (progn (delete-backward-char 1)
             (insert-latex-brackets opening closing))
        (insert char)
      )
    )
    
    (local-set-key (kbd "}") 'check-char-and-insert)
    

    最后一点:您可以尝试使用yasnippet,正确使用它可以节省实时时间。

    【讨论】:

    • yasn-p 实际上看起来很有希望。你自己用吗?
    猜你喜欢
    • 2014-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-05
    • 2021-11-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多