Emacs。“的特定格式”;{quot;
我找到了许多在键入“{”后自动插入“}”的方法,但从未找到以下实现: 键入“{”后,它移动到下一行(必要时缩进),下一行是带光标的空字符串,下一行是“}”:Emacs。“的特定格式”;{quot;,emacs,elisp,Emacs,Elisp,我找到了许多在键入“{”后自动插入“}”的方法,但从未找到以下实现: 键入“{”后,它移动到下一行(必要时缩进),下一行是带光标的空字符串,下一行是“}”: if (i == 0)*here we typing "{"* 并获得以下信息: if (i == 0) { | } 对于嵌套括号: if (i == 0) { if (j == 0) { | } } 如何做到这一点? 注意:我已经使用了yasnipped,但它不适用于函数。我做了类似的事情来模拟E
if (i == 0)*here we typing "{"*
并获得以下信息:
if (i == 0)
{
|
}
对于嵌套括号:
if (i == 0)
{
if (j == 0)
{
|
}
}
如何做到这一点?
注意:我已经使用了yasnipped,但它不适用于函数。我做了类似的事情来模拟Eclipse的换行功能
(defun my-newline ()
(interactive)
(let ((s (buffer-substring (point-at-bol) (point))))
(cond
((string-match ".*{$" s) ; matching a line ending with {
(move-end-of-line nil)
(insert "}") ; insert }. Can be removed if already being inserted
(backward-char 2)
(newline-and-indent)
(forward-char)
(newline-and-indent)
(move-beginning-of-line nil)
(backward-char 1)
(newline-and-indent))
(t (newline-and-indent)))))
然后你可以把它附加到你喜欢的任何键绑定上。我对C-j的使用超过了我以前的习惯
(defun my-newline-hook ()
(local-set-key (kbd "C-j") 'my-newline))
(add-hook 'java-mode-hook 'my-java-hook)
正则表达式和所采取的步骤可以根据您的需要进行调整。如果您使用的是电对模式,您可以提供自己的功能:
(defun my-electric-pair-open-newline-between-pairs()
"Indent paired char and empty line"
(when (and (eq last-command-event ?\n)
(< (1+ (point-min)) (point) (point-max))
(eq (save-excursion
(skip-chars-backward "\t\s")
(char-before (1- (point))))
(matching-paren (char-after))))
(save-excursion
(insert "\n")
(indent-according-to-mode))
(indent-according-to-mode))
nil)
(setq-default electric-pair-open-newline-between-pairs 'my-electric-pair-open-newline-between-pairs)
(electric-pair-mode 1)
(defun my-electric-pair-open-newline-between-pairs()
“缩进成对字符和空行”
(何时(和(eq上次命令事件?\n)
(<(1+(最低点))(最高点))
(eq(保存偏移)
(向后跳过字符“\t\s”)
(在(1-(点))之前的字符)
(匹配参数(后面的字符)))
(省去远足
(插入“\n”)
(根据模式缩进)
(根据模式缩进)
零)
(setq默认电气对开对间换行符“我的电气对开对间换行符”)
(电气对模式1)
只有在空括号之间点击回车键,它才会执行您所描述的操作。很抱歉回答延迟。您的解决方案的工作方式有点不同。要获得所需的结果,我必须执行以下操作:/在键入“{”//type“{”之前按回车键//press return/如果排除第一次返回,则此解决方案适用。对不起,在这种情况下,我不想使用其他快捷方式。也许此函数可以绑定到键入“{”。