1

私はオートコンプリートモードを使用しています。多くの主要なモードで正常に動作します。しかし、候補を選択するために TAB を使用するのは好きではありません。

ユーザーマニュアルには、RET を使用して補完を選択するための次の例の Lisp 行があります。

(define-key ac-mode-map (kbd "RET") 'auto-complete)

これは補完に最適です。

しかし、RET で候補を選択できるようになったので、RET を使用して改行を挿入することはできなくなりました。

両方を行うことは可能ですか?

理想的には、RET を使用して入力候補リストから候補を選択したいのですが、リストが表示されない場合は、改行を挿入するために通常どおり RET を使用したいと考えています。

どうすればいいですか?

4

1 に答える 1

1

あなたが言うように、デフォルトの動作が失われるため、単純に RET キーを再マップすることはできません。オートコンプリートのために単語の終わりにいるかどうかをチェックする関数を作成する必要があり、それ以外の場合は通常のことを行います。

(defun complete-or-newline (arg)
  (if (and
        (or (bobp) (= ?w (char-syntax (char-before))))
        (or (eobp) (not (= ?w (char-syntax (char-after))))))
      (auto-complete)
    (newline-and-indent)))

このスニペットは、この投稿を修正したものです。

次に、関数を使用するように RET を再マップします。

(define-key ac-mode-map (kbd "RET") 'complete-or-newline)

このソリューションには 2 つの欠点があります。

  • に引数を渡すことはできませんauto-complete。これは で実行できますがinteractive、どのように機能するのか正確にはわかりません。

  • 行末で RET を押すとauto-complete、新しい行を挿入する代わりに実行しようとします。どうすればよいかわかりませんが、状態を改善する必要があります。

于 2012-05-10T07:10:51.447 に答える