2

我是一个emacs新手。我正在尝试扩展字符“。” 到“。”(带有两个空格的句点,以便在 emacs 中更有效地结束一个句子)带有缩写。换句话说,当我键入“。”时 后面跟一个空格,emacs放一个“.”。

我已将下一个代码放在我的 abbrevs 文件中,但它不起作用。

(text-mode-abbrev-table)                                    
"."            0    ".    " 

任何人都可以帮助我吗?

4

3 回答 3

1

我不确定你为什么想要这个,但它是:

把这个放在~/.emacs

(defun electric-dot ()
  (interactive)
  (if (and (looking-back "\\w") (not (looking-back "[0-9]")))
      (progn
        (self-insert-command 1)
        (insert "  "))
    (self-insert-command 1)))

(defvar electric-dot-on-p nil)

(defun toggle-electric-dot ()
  (interactive)
  (global-set-key
   "."
   (if (setq electric-dot-on-p
             (not electric-dot-on-p))
       'electric-dot
     'self-insert-command)))

之后,如果它在一个单词之后,则使用M-xtoggle-electric-dot 来制作每个.insert 。. 您可以再次调用它来恢复默认行为。

作为旁注,有很多更好的方法可以提高您的文本输入速度,例如auto-complete-mode. 您可以使用package-install.

UPDelectric-dot在数字后仅插入一个点。

UPD 这里是electric-space

如果它回头看一个单词后跟一个点,它将插入一个额外的空格。

(defun electric-space ()
  (interactive)
  (if (looking-back "\\w\\.")
      (insert " "))
  (self-insert-command 1))

(defvar electric-space-on-p nil)

(defun toggle-electric-space ()
  (interactive)
  (global-set-key
   " "
   (if (setq electric-space-on-p
             (not electric-space-on-p))
       'electric-space
     'self-insert-command)))
于 2013-07-25T20:42:11.420 回答
0

安装 key-chords 包。然后像这样定义一个。

(key-chord-define-global ". " ".  ")

键和弦接受的键种类更多,然后是缩写,因此“。”可能会起作用。但是这两个键必须快速连续按下(这在这里应该不是问题)。

于 2013-07-25T23:40:11.120 回答
0

您的缩写不起作用的原因是因为默认情况下,缩写名称只能由单词元素字符(基本上是字母数字字符)组成,而.不是这样的字符。:regexp你可以通过改变你的属性来规避这个问题,text-mode-abbrev-table但这真的不值得麻烦。相反,你可以做

(defun my-electric-space-post-insert ()
  (and (eq (char-before) ?\s)
       (eq (char-before (1- (point))) ?.)
       (insert " ")))
(add-hook 'post-self-insert-hook #'my-electric-space-post-insert)
于 2013-07-26T13:53:05.140 回答