我刚刚开始使用emacs,并且有一个我非常喜欢的功能,而且搜索一下也没用。我希望其他人这样做是因为我还不想学习elisp。
void foo()<cursor>
我想输入一个“{”来导致这种情况发生
void foo(){
<cursor>
}
我希望这只发生在cc模式中,并且只在不在字符串/ comment / etc中的行尾?
首先想到的是重新绑定“{”来做到这一点(我可以弄清楚如何自己做),但很难让它只在恰当的时间发生。
任何提示都将不胜感激。
答案 0 :(得分:9)
您可以使用最新的emacs:
electric-pair-mode is an interactive compiled Lisp function.
(electric-pair-mode &optional ARG)
Automatically pair-up parens when inserting an open paren.
这已集成在Emacs 24.1(实际上是CVS)
中答案 1 :(得分:5)
这样做:
(defun my-c-mode-insert-lcurly ()
(interactive)
(insert "{")
(let ((pps (syntax-ppss)))
(when (and (eolp) (not (or (nth 3 pps) (nth 4 pps)))) ;; EOL and not in string or comment
(c-indent-line)
(insert "\n\n}")
(c-indent-line)
(forward-line -1)
(c-indent-line))))
(define-key c-mode-base-map "{" 'my-c-mode-insert-lcurly)
答案 2 :(得分:3)
我衷心建议您尝试优秀的autopair次要模式 - 它不仅仅是简单地插入大括号,而且使Emacs在该区域更像IDE。我想将它与cc模式中的电动支架设置相结合会给你或多或少的行为。
答案 3 :(得分:2)
答案 4 :(得分:2)
在emacs 24或更新版本中打开电子对模式。
(electric-pair-mode 1)
答案 5 :(得分:1)
你需要深入研究emacs-lisp才能完全按照你的意愿去做,因为YASnippet会为你做一些不错的事情,但不完全是你所要求的。
我认为最简单的方法是在cc模式键映射中将函数绑定到 RET 键。
该函数应检查前一个字符是 {,如果是,请执行必需的 RET , RET , TAB ,} ,向上, TAB 将光标移到您想要的位置并关闭} 插入
您可以通过检查平衡关闭} 来使功能更加强大,但这会更复杂,我建议您看看没有这种额外的抛光功能时的感觉。
如果您愿意,我可以为您编写功能和键盘映射绑定,但是由于您询问了它是如何完成的,所以如果您需要它,我会留给您寻求更多帮助。
或者,我发现 autopair.el 对我来说这很好,而且我自己做了换行;)
答案 6 :(得分:1)
您可能希望保留空函数体的选项,在这种情况下,您希望闭括号保持在同一行。如果是这种情况,那么您可以尝试这种替代解决方案:
如果要向函数体添加语句,请按>> pkg install symbolic-2.2.1.tar.gz
configure: error: Failed to find Python
checking for python... no
pkg: error running the configure script for symbolic.
error: called from 'configure_make' in file C:\Octave\Octave- 4.0.0\share\octave\4.0.0\m\pkg\private\configure_make.m near line 79, column 9
键(同时自动添加的右括号仍在光标下)。回归&#39; key的约束如下:
Return