Emacs 显示不可见符号 (\n)。

4

我想在Emacs中突出显示几个不可见的符号,特别是\n。我正在尝试以下方法:

(standard-display-ascii ?\n "¬\n")
(font-lock-add-keywords nil '(("¬" . font-lock-comment-face)))

很遗憾,只有显式打印的符号才会使用指定的字体。是否有一种适当的方法来突出显示display-ascii符号?

还有一个相关问题:在第二个表达式中用'lisp-interaction-mode替换nil会导致它无法工作。这是为什么?


https://dev59.com/-Ww15IYBdhLWcg3w0fAV - merlin2011
据我所知,whitespace-mode仅突出显示空格。 - egdmitry
这个页面似乎表明有一个针对换行符的小模式。 - merlin2011
3个回答

15

我刚刚启动了Emacs,执行了命令M-x,并输入了

whitespace-mode

后来我得到了一个表示换行的 $ 标记。


5

要仅显示换行符,可以使用以下方法:

(global-whitespace-newline-mode)

或者使用另一种选择:

(setq whitespace-style '(face newline-mark))
(whitespace-mode t)

要使用自定义符号 ¬

(setq whitespace-display-mappings
      '((newline-mark 10 [172 10])))

然后可以使用whitespace-newline字体锁定来自定义样式。

编辑:

由于某种原因,将此自定义放置在.emacs配置中导致面孔样式不适用于该符号,我不知道为什么(如果有人能解释一下就好了)。使用钩子可以正常工作:

(add-hook 'prog-mode-hook
          (lambda () 
            (whitespace-newline-mode t)))

1
以下是一些可用于自定义空格模式的设置:行、行尾、换行符、尾随空格、制表符前空格、制表符后空格、空行、缩进空格、缩进和制表符、空格。这里有一个仅包含空格、制表符和行尾的示例:(setq whitespace-style '(face space-mark tab-mark newline-mark) )我不使用全局模式,而是喜欢使用模式钩子和(whitespace-mode t) - lawlist
1
"M-x describe-variable RET whitespace-style":*. . . face -- 通过面(见下文)启用所有可视化。. . .* - lawlist
谢谢。关于钩子的使用。您是否明确说明要启用白线的模式?我想添加每种模式到列表中可能很繁琐,特别是当您学习一种新语言时。或者有什么技巧可以使它更容易? - egdmitry
1
我有一个模式钩子列表,我经常使用并根据需要添加或删除所需选项--例如(add-hook 'text-mode-hook (lambda () (whitespace-mode t) (linum-mode 1) (hl-line-mode 1) . . .))。另外,您可以拥有全局模式/函数并插入条件--例如(when (eq major-mode 'c-mode) . . .)。还有其他方法,但这些是我经常使用的最常见方法。您甚至可以将常用方法包装到函数中--例如(defun my-favorite-minor-modes() (whitespace-mode t) (linum-mode 1) (hl-line-mode 1)),并将该函数放在模式钩子中。 - lawlist
让我们在聊天中继续这个讨论:http://chat.stackoverflow.com/rooms/52451/discussion-between-egdmitry-and-lawlist - egdmitry
显示剩余2条评论

4
  1. Highlighting newline chars is trivial using the library highlight-chars.el:

    M-x hc-highlight-chars C-q C-j RET font-lock-comment-face RET
    

    You are prompted for the chars to highlight -- hit C-q C-j (inserts a newline char), then hit RET to enter the list of chars you inserted (just a newline char here).

    You are then prompted for the face to use to highlight those chars (in this case, just one char, newline) -- type font-lock-comment-face or whatever other face name you like.

    See description of the library here.

  2. And if you want to also change the display to show (the highlighted char) ¬, then just do also what you already tried:

    M-: (standard-display-ascii ?\n "¬\n")
    
#1 + #2的结果用¬代替通常的换行符显示。

我选择了我的解决方案,因为它不需要任何额外的扩展并且似乎工作正常。尽管当我不明白某些东西为什么不起作用时,我有一种可怕的感觉——我觉得如果我发现更多问题,我将无法修复它们,因为我已经不知道它是如何工作的。 - egdmitry
那我不明白你最初的问题/问题。 你说它起作用,据我所知。 实际上仅评估您的两个sexps并不起作用,据我所知——“显示ASCII符号”未突出显示,正如您所述。 我以为那就是你的问题。 你的问题到底是什么,你是“跟随你的解决方案”解决的呢? 你应该清楚地将你的解决方案发布为答案。 如果这是您喜欢的解决方案,请接受它。 这是关于帮助他人和澄清事情。 - Drew
我已经将我的解决方案发布为答案。我还不能接受它。如果不够清晰,我会进行修改。 - egdmitry
不知道为什么,我没有注意到那个答案是你发的。对于造成的干扰感到抱歉。 - Drew
1
  1. hc-highlight-chars 的第一个参数是一个字符列表,而不是单个字符。例如:("\n")。请查看文档字符串。(我刚刚稍微澄清了一下文档字符串;请参阅最新版本)。 因此,例如,可以使用 (hc-highlight-chars '("\n") 'whitespace-newline)
  2. 查看选项 hc-other-chars-font-lock-override 以与其他字体锁定进行交互-您需要将其值设置为 t。一般来说,请查看文档。
- Drew
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接