我是一个emacs新手。我正在尝试扩展字符“。” 到“。”(带有两个空格的句点,以便在 emacs 中更有效地结束一个句子)带有缩写。换句话说,当我键入“。”时 后面跟一个空格,emacs放一个“.”。
我已将下一个代码放在我的 abbrevs 文件中,但它不起作用。
(text-mode-abbrev-table)
"." 0 ". "
任何人都可以帮助我吗?
我是一个emacs新手。我正在尝试扩展字符“。” 到“。”(带有两个空格的句点,以便在 emacs 中更有效地结束一个句子)带有缩写。换句话说,当我键入“。”时 后面跟一个空格,emacs放一个“.”。
我已将下一个代码放在我的 abbrevs 文件中,但它不起作用。
(text-mode-abbrev-table)
"." 0 ". "
任何人都可以帮助我吗?
我不确定你为什么想要这个,但它是:
把这个放在~/.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
.
electric-dot
在数字后仅插入一个点。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)))
安装 key-chords 包。然后像这样定义一个。
(key-chord-define-global ". " ". ")
键和弦接受的键种类更多,然后是缩写,因此“。”可能会起作用。但是这两个键必须快速连续按下(这在这里应该不是问题)。
您的缩写不起作用的原因是因为默认情况下,缩写名称只能由单词元素字符(基本上是字母数字字符)组成,而.
不是这样的字符。: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)