March 20, 2020
By: Kevin

emacs中文标点映射为英文标点

  1. 文件出现中文标点会怎么样?
  2. 那有什么地方必须输入中文字符吗?
  3. 解决方案?
  4. 更好的方案?

文件出现中文标点会怎么样?

代码文件: 会报错,除非在注释中,或者是字符串中.

markdown/org: 特定标记要求英文字符, 中文符号会出现莫名奇妙的问题.

那有什么地方必须输入中文字符吗?

我没发现, 所以我们是不是可以把所有的汉语标点映射为英文标点呢. YES!

解决方案?

emacs中可以把中文输入的标点,或者符号,统统映射为英文标点,或者符号

(let (
      ($replacePairs
       [
        ["," ","]
        ["。" "."]
        [";" ";"]
        [":" ":"]
        ["【" "["]
        ["】" "]"]
        ["「" "["]
        ["」" "]"]
        ["(" "("]
        [")" ")"]
        ["!" "!"]
        ["、" "\\"]
        ["/" "/"]
        ["《" "<"]
        ["》" ">"]
        ["‘" "'"]
        ["’" "'"]
        ["“" "\""]
        ["”" "\""]
        ["~" "~"]
        ["|" "|"]
        ]
       ))
  (mapcar (lambda(x) (define-key key-translation-map
                  (kbd (elt x 0)) (kbd (elt x 1)))) $replacePairs))

更好的方案?

这个映射的缺点

  1. 全局生效, 针对所有文件/mode.
  2. 无法关闭, 一旦映射(map)发生, 就无法unmap.

做成一个minor-mode, 用hook挂在特定的major-mode上(解决问题1), 可以随时开或者关闭(解决问题2).

Tags: emacs