2

拡張に使用する場合dabbrev-expand、Emacsは現在のバッファーを検索し、次に同じモードの他のバッファーを検索します。これはdabbrev-friend-buffer-function、デフォルトでに設定されているによって処理されますdabbrev--same-major-mode-p

これは問題なく動作しますが、使用したいと思いますhippie-expand

(setq hippie-expand-try-functions-list
  '(try-expand-dabbrev
    try-expand-dabbrev-all-buffers))

これにより、現在のメジャーモードと一致しないバッファーも含め、すべてのバッファーから補完がプルされます。

hippie-expand現在のバッファーと同じメジャーモードを使用するバッファーからのみ取得されるdabbrev補完で使用するにはどうすればよいですか?

4

2 に答える 2

2

手っ取り早いソリューション: 関数のソース コードをtry-expand-dabbrev-all-buffers新しい場所にコピーし、名前を変更して (たとえば) try-expand-dabbrev-all-buffers-same-mode、式を次の式に置き換え(buffer-list)ます。

(remove-if-not (lambda (x) (eq major-mode (with-current-buffer x major-mode)))
               (buffer-list))

((require 'cl)を取得するremove-if-notか、 および に関して再実装する必要がmapcarありdelqます。)

次に、もちろんinにtry-expand-dabbrev-all-buffers置き換えます。try-expand-dabbrev-all-buffers-same-modehippie-expand-try-functions-list

try-expand-dabbrev-all-buffersを使用したソースを取得できますC-hf

于 2012-12-19T18:11:54.650 に答える
1

Sean の優れた提案に基づいて ( dash.el list ユーティリティ ライブラリがインストールされていると仮定して):

(autoload '--filter "dash" nil t)

;; only consider buffers in the same mode with try-expand-dabbrev-all-buffers
(defun try-expand-dabbrev-matching-buffers (old)
  (let ((matching-buffers (--filter
                           (eq major-mode (with-current-buffer it major-mode))
                           (buffer-list))))
    (flet ((buffer-list () matching-buffers))
      (try-expand-dabbrev-all-buffers old))))
于 2012-12-19T18:46:41.017 に答える