2

一意のオプションが1つしかない場合にすぐにトリガーするようにオートコンプリートをコーディングするにはどうすればよいですか?(または、いくつかのオプションがあるが、それらはすべて同じベースを持っている場合)

(eval-exp_[point-is-here]_)

オートコンプリートオファー:

(eval-expression
(eval-expression-print-format)

さて、それがユニークなオプションに当たったとき、それがすぐに完了する(eval-expressionとしたら、それからそれを入力"-"するとすぐに印刷形式を選択するのは素晴らしいことではないでしょうか?

2つのオプションがある場合でも、次の例では、"-p"完了するだけでよいことがわかります。

(eval-expression-print-format)
(eval-expression-something-else)

この動作はEmacsで可能ですか?

4

2 に答える 2

2

必要な動作を実現します。

(defadvice ac-inline-show (after eab-ac-expand activate)
  (if (> (length ac-candidates) 1)
      (let ((ac-common-part (try-completion ac-prefix ac-candidates)))
        (ac-expand-common))
    (progn
      (ac-expand-string ac-common-part)
      (ac-inline-hide)))
  (setq eab-last-selected-candidate ac-selected-candidate))

非アクティブ化の場合:

(ad-remove-advice 'ac-inline-show 'after 'eab-ac-expand)
(ad-deactivate 'ac-inline-show)

編集:

私はワークフローを試し、誤記をキャンセルする1つの方法を見つけました。例として、印刷lamして展開しますが、誤っlambdaて追加して取得します。だから私はセットアップしますbdlambdabd

(global-set-key (kbd "C-<tab>") '(lambda () (interactive) (flet ((ac-candidates () `(,eab-last-selected-candidate))) (ac-fuzzy-complete)) (ac-expand)))

そしてそれを使用します:lambdabdになりlambda、通常どおり続行できます。

EDIT2:

このソリューションには1つの欠点がありました。それは、「ファジーを実行すると少し遅くなる」ということです。forにナローイングac-candidatesすることで修正されます。今では速いです!eab-last-selected-candidateac-fuzzy-complete

于 2013-01-19T09:05:27.017 に答える
0

M-1候補者が少ない場合は、、などでそれぞれを選択できますM-2。2〜7人の候補者に対しては問題なく機能します(例のキーストロークと比較し-pてください)。単一の候補者の状況を許可することはできませんM-<number>。候補者がまだ少ない場合は、以前に使用してください。

M-<number>関数のキーバインドですac-complete-<number>

また、関数ac-isearchC-s)も便利です。最初に、eva_[point]_文字列を検索するfopr、を押しC-sて、絞り込んだリストから選択することができます。

于 2013-01-18T14:18:51.873 に答える