【问题标题】:Emacs Pretty Symbols in cperl mode: :: must be surrounded my spacescperl 模式下的 Emacs Pretty Symbols: :: 必须被我的空间包围
【发布时间】:2019-04-23 22:56:06
【问题描述】:

我将 Emacs 与 PDE 和 cperl 模式一起使用。我真的希望 prettify-symbols-mode 可以使用它。仅使用 perl 模式时会发生这种情况:

Mod::thing->new( {c => 'sea'} );

变成

Mod∷thing→new( {c ⇒ 'sea'} );

但是当使用 cperl 时,相同的表达式变成了

Mod::thing→new( {c ⇒ 'sea'} );

在 cperl 模式下,:: 仅在两边用空格分隔时才变为

我尝试添加到 cperl--pretty-symbols-alist 和 pretty-symbols-alist。仍然只有->=> 工作。

我认为这可能是 cperl 将字符定义为符号或单词的方式,但 ->=> 工作得很好,没有被空格包围。

【问题讨论】:

  • 这是因为cperl-mode 在其语法表中为: 字符提供了语法“符号成分”,而perl-mode 为其提供了语法“标点符号”。
  • 我可以把它改成别的吗?做到这一点的 elisp 代码是什么?

标签: emacs pde cperl-mode


【解决方案1】:

我明白了。我去了/usr/share/emacs/26.1/lisp/progmodes 并删除了一个名为 cperl-mode.elc 的文件。然后我在这里/usr/share/emacs/26.1/lisp/progmodes/cperl-mode.el.gz 进入档案室。我将 cperl-mode.el 的第 1498 行编辑为 (modify-syntax-entry ?: "." cperl-mode-syntax-table) 而不是 (modify-syntax-entry ?: "_" cperl-mode-syntax-table)。然后我对文件进行字节编译并将其放回/usr/share/emacs/26.1/lisp/progmodes

【讨论】:

    【解决方案2】:

    您也可以在您的 init 文件中执行此操作,这样您就不必编辑 Emacs 附带的任何文件。如果您编辑 Emacs 中的文件,则每次安装或升级时都需要更新它们。

    (with-eval-after-load "cperl-mode"
      (modify-syntax-entry ?: "." cperl-mode-syntax-table))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-08
      相关资源
      最近更新 更多