web-mode auto-pairing 无效

尝试用 web-mode,engine用的django,已经设置为auto pair,但是每次输入 {{ 或者 {% 并没有触发 auto-pair,不知道大家有没有碰到过这个问题。怀疑可能是 evil 造成的,但是也没有证据。

image

另外,注意到每次输入花括号都会在minibuffer回显以下内容:

可以尝试下awesome-pair

两个花括号这种是模板语法,应该是 web-mode 内置不支持的,看是不是少启用了某些 minor-mode,这些 minor-mode 估计提供了支持

Search failed 看,应该是某个(例如 paredit 之类的?)扩展导致补全过程中断。

最好把 backtrace 打出来。

Search failed 信息出自 smartparens:

嗯嗯,抽空尝试一下

web-mode支持的,不然不会有那个变量。而且我在原贴中提到我已经将engine切到django,django模板的语法高亮都没问题的。

是的,确实是 smartparens,把它停用后web mode auto-pairing的问题依旧,看来并不是用smartparens的功能实现的。

我试了只加载 evilweb-modeelectric-pair-mode 没问题。

{{ 可以补全(其实是 { 单独补全了两次)。

{% 只能得到 {%}(想要补全 % 得自己实现)。

⋊> emacsq.sh \
    -P web-mode,evil \
    -M electric-pair-mode \
    -batch \
    --eval '(progn
              (switch-to-buffer "*.html")
              (web-mode)
              (evil-mode 1)
              (evil-insert-state)
              (execute-kbd-macro (kbd "{{"))
              (goto-char (point-max))
              (insert "\n")
              (execute-kbd-macro (kbd "{%"))
              (message "%s" (buffer-string)))'

Package cl is deprecated
{{}}
{%}

:link: https://github.com/twlz0ne/emacsq-sh

1 个赞

wow,这个脚本用来快速尝试elisp代码不错,不懂的地方是第一句:switch-to-buffer不会报错吗?这个buffer在哪里创建的?

switch-to-buffer 会按需自动创建 buffer。

1 个赞

我尝试把你贴出来的命令修改了一下,加了elpa dir,但是不工作,找不到 web-mode

./emacsq.sh \
    -P web-mode,evil \
    -M electric-pair-mode \
    -ed ~/.emacs.d/epla/27.2/develop \
    -batch \
    --eval '(progn
              (switch-to-buffer "*.html")
              (web-mode)
              (evil-mode 1)
              (evil-insert-state)
              (execute-kbd-macro (kbd "{{"))
              (goto-char (point-max))
              (insert "\n")
              (execute-kbd-macro (kbd "{%"))
              (message "%s" (buffer-string)))'

加一行 -ud ~/.emacs.d/epla/27.2 \ 试试,脚本可能有点 bug。

─λ ./emacsq.sh \
            -P web-mode,evil \
            -M electric-pair-mode \
            -ud ~/.emacs.d/epla/27.2 \
            -ed ~/.emacs.d/epla/27.2/develop \
            -batch \
            --eval '(progn
                  (switch-to-buffer "*.html")
                  (web-mode)
                  (evil-mode 1)
                  (evil-insert-state)
                  (execute-kbd-macro (kbd "{{"))
                  (goto-char (point-max))
                  (insert "\n")
                  (execute-kbd-macro (kbd "{%"))
                  (message "%s" (buffer-string)))'
Cannot open load file: 没有那个文件或目录, web-mode

不行

这就有点奇怪了,确定 develop 底下的目录结构对吗?

我这里目录结构是这样的,例如要测试放在备份目录下的 ivy:

⋊> ls ~/.emacs.d/27.1/
elpa    elpa.bak

⋊> ls ~/.emacs.d/27.1/elpa.bak/
archives    gnupg    ivy-20210202.1423 ...

⋊> emacsq.sh \
    -ed ~/.emacs.d/27.1/elpa.bak \
    -P ivy --batch --eval "(princ (functionp 'ivy-mode))"
t

应该是没错

╰─λ ls ~/.emacs.d/elpa/27.2/develop/ | grep web-mode
web-mode-20210131.1758

load-path 打印出来看看:

                           (package-initialize)
+                          (print load-path)
                           (unless (string-empty-p \"${opt_load_pkgs}\")