27

多くの代替 Emacs 自動補完メカニズムがあるようです。徹底的な検索をしなくても、次のことが頭に浮かびます: ido、オートコンプリート、つらら、バッファー内補完、ミニバッファー補完、標準のアウトオブボックス補完。そして、コード補完があります。たくさん。そしてその多くは言語に依存しています。コードと非コードのオートコンプリートの両方における主要プレーヤーの利点をまとめた Emacs の達人が 1 人か 3 人いると非常に便利です。そして、これは Stack Overflow であるため、言うまでもなく、Emacs の IDE のようなメカニズムに最適なオート コンプリート モードを特定することは良いことです。

更新: Emacs Wiki の完了ページを見つけたところ、私の基本的な質問が増幅されました。これらすべての選択肢の中で、何が良いのか、何が悪いのか、そして 2 ~ 3 でしか遊べない場合、どれをお勧めしますか?

4

4 に答える 4

8

つららの書き込み--

ほとんどの場合、Icicles はミニバッファーの完成に関するものです。バッファー内 (コードなど) での補完を提供する場合もいくつかありますが、主にミニバッファーの補完に関するものです。

ほとんどの人は、ミニバッファー補完について考えるとき、ファイル名補完、バッファー名補完、およびコマンド名補完を思い浮かべます。しかし、それだけではありませ

Emacs-Lisp プログラマーは、ユーザーに対話的に選択させたい場合はいつでも補完を使用できます。それはかなり一般的です!

補完は実際には、 set を定義するためのパターン マッチングに関するものであり、後で操作することができます。

ほとんどの人は、ミニバッファー補完の唯一の目的は、単一の名前 (ファイル、バッファー、コマンド、変数など) を選択することだと考えています。しかし、補完の力は実際には、ファイル名、バッファー名などの完全なセットをさまざまな方法でフィルタリングし、場合によっては並べ替えてから、ユーザーが結果のセット(必ずしも単一のオブジェクトである必要はありません)に対して何かを実行できるようにすることです。

それがIciclesの目的です: pattern-matching を使用してセットを動的に (インクリメンタルに) 定義し、選択したメンバーまたはそれらのセットのすべてのメンバーに作用させます。

これはIdoや他の補完パッケージの目的ではありませんが、 Helm (Anything)は例外となる可能性があります。

Helm (Anything)とは異なり、オブジェクト タイプとアクションよりもオブジェクト名を開始点として優先しますが、 Iciclesでは通常、コマンドを呼び出して特定のタイプの 1 つまたは複数のオブジェクト(バッファなど)に対して何かを実行し、次にオブジェクトを絞り込みます。これらのオブジェクトのセットで、通常は名前の一致によって行われます。Iciclesでは、同じコマンド内で複数の関連する方法でこれらのオブジェクトを操作できることがよくあります。

Helm (Anything)では、一般に、入力は最初にオブジェクト名によってすべてのタイプのオブジェクトの宇宙全体と照合され、その後、実行する操作を絞り込むために絞り込まれます。

最後に、さまざまな補完アプローチのそれぞれが、エンド ユーザー向けのもの (コマンドなど) とプログラマ向けのもの (補完機能など) の両方を提供することに注意してください。

コード補完を行っている場合は、通常、ポイントで名前を補完したいだけです。コード補完の主な興味深い点は、適切な候補が何であるかを判断することです。そのためには、通常、テキスト (コードなど) のコンテキストが非常に重要です。スマートな選択を提供するには、補完機能でコンテキスト (コード) を分析する必要があります。これには、あらゆるコンテキスト (プロジェクト コードなど) が含まれます。

一方、ミニバッファーの補完は、複数のアクションを持つ複数の選択肢を含む、あらゆる種類の選択とアクションに使用できます。ここでは、すべての部分が興味深いです: どの候補を提供するか、それらで何ができるかなどです。

それが役立つかどうかはわかりませんが、とにかくそれが私の見解です。

于 2011-08-21T23:52:01.243 に答える
7

私は通常、2つの補完パッケージを使用します(ミニバッファーとcomintバッファーに組み込まれているTAB補完を除く)。

pabbrev.el-カーソルで(を押しTABて)受け入れるための提案を提供します。選択は単語の頻度を見ることによって行われます。何が完了するかを視覚的に示すことができるので、これが好きですが、ほとんどの場合、1回の完了で機能します。

hippie- expand-これは、dabbrevが行うことすべてを実行するため、一般的M-/にdabbrevの代わりにバインドされます。これは、いくつかの選択肢を循環する必要がある場合、またはファイル名などを完成させたい場合にうまく機能します。

マウスを動かす必要がなく、すばやく動作するので、どちらも気に入っています。

于 2010-01-20T22:35:53.417 に答える
4

CEDET を含むさまざまな補完ソースを使用できる会社モードまたはオートコンプリート パッケージを見ることができ、新しい補完ソースを定義することもできます...一部のプログラミング言語では、CEDET を直接使用できます...

于 2010-01-20T09:45:05.727 に答える
4

M-x私は、ファイル名、コマンド、およびその他のものに対して、ミニバッファーで標準のタブ補完を使用します。

また、Emacs バッファーの任意の単語を動的に補完するために、M-/キーストローク ( ) を頻繁に使用します。dabbrev-expand特に長い変数名の場合は素晴らしいです。ドキュメントは次のとおりです。

M-/ は、対話型のコマンド dabbrev-expand を実行します。
`dabbrev.el' にオートロードされた Lisp 関数。

M-/にバインドされています。

(dabbrev-expand ARG)

前の単語「動的に」を展開します。

これがプレフィックスである直前の単語に展開されます。
適切な前の単語が見つからない場合、ポイントの後の単語は
考慮。それでも適切な単語が見つからない場合は、
変数が指す関数が受け入れるバッファ
`dabbrev-friend-buffer-function'.

正の前置引数 N は、N 番目を逆方向に *distinct* することを示します。
可能性。負の引数は、前方検索を示します。

カーソルが前の展開の最後から移動していない場合、および
引数が指定されていない場合、以前に作成された展開を置き換えます
次の可能な拡張はまだ試行されていません。

変数 `dabbrev-backward-only' を使用して、
非 nil に設定されている場合、後方への検索方向。

`dabbrev-abbrev-char-regexp' と CM-/ も参照してください。
于 2010-01-20T09:28:20.463 に答える