web-mode 下花括号和方括号内, 回车换行多了一行

在 web-mode 下,回车有缩进,但是下面会多添加一缩进过的行,正常情况下应该只有一行的。

如下图所示:

02 PM

查看 回车键 的绑定如下:

RET runs the command newline-and-indent (found in global-map), which is an
interactive compiled Lisp function in ‘simple.el’.

It is bound to RET.

(newline-and-indent)

:around advice: ‘ad-Advice-newline-and-indent’

Insert a newline, then indent according to major mode.
Indentation is done using the value of ‘indent-line-function’.
In programming language modes, this is the same as TAB.
In some text modes, where TAB inserts a tab, this command indents to the
column specified by the function ‘current-left-margin’.

[back]

我这里工作正常,RET的描述看起来也一样。不过我都用<c-return>插入一对大括号并开始在中间编辑,感觉可以绕过你的问题:

神奇了,C-RET 就好了,而且之后的编辑也正常了。:+1:

你没有绑C-RET,只是用它来代替RET吧?然后就好了,感觉是RET卡住了。。

提问前三思,找出复现的方法,避免乌龙。

我个人的习惯是:用代码/脚本描述问题,确保 100% 触发,才会去提 issue,看到这个问题的人只需敲个回车执行,就知道我在说什么,例如 show-smartparens hanging when cursor on the right parenthesis · Issue #814 · Fuco1/smartparens · GitHub

1 个赞

这是非常好的习惯,向你学习!

另外,这个 bug 我也碰到过,但是都 C-g 然后不管它了,感谢你提出来。

之前说错了,后来将回复修改了一下。 发现 C-h k 查看 keybinding,按 C-RET 其实查看的是 RETCTRL 键并没有输入。

我的环境是 macOS High Sierra , terminal, [email protected]

得再研究一下原因

ad-Advice-newline-and-indent 是什么?

ad-Advice-newline-and-indent is a compiled Lisp function.

(ad-Advice-newline-and-indent AD--ADDOIT-FUNCTION)

Around-advice ‘clean-aindent’:
Advice for newline-and-indent(), implements clean auto-indent.
Removes unneeded whitespaces by keeping track of the place of the
last indentation so that they can be deleted in case the indentation was
abandoned.

[back]

应该是给 newline-and-indent 添加 advice (hook)的吧,比较迷惑是否是某个包给 newline-and-indent 添加了 advice

发现是 smartparens 导致的,禁掉 smartparens 就好了

;; (defun adispring/post-init-smartparens ()
;;   (if dotspacemacs-smartparens-strict-mode
;;       (add-hook 'web-mode-hook #'smartparens-strict-mode)
;;     (add-hook 'web-mode-hook #'smartparens-mode)))

继续查找原因,发现是 smartparens-mode 和 electric-pair-mode 冲突了,最终解决方案如下:

(electric-pair-open-newline-between-pairs nil)

2 个赞