2

私はemacsの初心者です。文字「。」を拡張しようとしています。"." (emacs で文を終了する際により効果的にするために 2 つのスペースを含むピリオド) に略語を使用します。つまり、「。」を入力すると、スペースが続くと、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.挿入を作成するために使用します。. もう一度呼び出すと、デフォルトの動作を復元できます。

補足として、テキスト入力速度を改善するためのはるかにauto-complete-mode優れた方法がたくさんあります。でインストールできますpackage-install

UPDelectric-dotは数字の後にドットを挿入します。

UPDelectric-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

略語が機能しない理由は、デフォルトでは、略語名は単語要素文字 (基本的には英数字) のみで構成でき、.そのような文字ではないためです。: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 に答える