VimのCtrl+Nは通常、次のように機能します。いくつかの文字を入力してCtrl+Nを押すと、Vimは開いているすべてのバッファー内の単語に基づいて補完を提供します。
Emacsのソリューションは同一である必要はありません。私は主に次のように使用します。変数を宣言してから、後のコードで使用します。しかし、私はソースコードを解析しないという軽量のアプローチが好きです。
VimのCtrl+Nは通常、次のように機能します。いくつかの文字を入力してCtrl+Nを押すと、Vimは開いているすべてのバッファー内の単語に基づいて補完を提供します。
Emacsのソリューションは同一である必要はありません。私は主に次のように使用します。変数を宣言してから、後のコードで使用します。しかし、私はソースコードを解析しないという軽量のアプローチが好きです。
デフォルトで M-/ にバインドされた dabbrev-expand が必要です。私は Vim を使用していませんが、あなたの説明からすると、まったく同じことを行います。
お気に入りのキーにバインドされたヒッピーエキスパンドを試してください
(global-set-key (kbd "M-/") 'hippie-expand)
補完リストを提示する代わりに、バインドされたキーを繰り返し押すと、その場で補完が繰り返されます。
なぜ「ヒッピー」が拡大するのか? 「人生は悪いコードには短すぎる」の記事を読むまで、名前が有益でなく不快だったので、私は実際に関数を見ることを避けました。( Hippie-expand に関する EmacsWiki のエントリでも、「なぜ 'ヒッピー?'」と尋ねられますが、これも答えられません。)
私は個人的にオートコンプリートを使用しています。これにより、素敵なドロップダウン ボックスが表示されます。アクティブにする前に入力する文字数を選択し、dabbrev-expand のものを含め、表示する内容をカスタマイズできます。
;; Allow tab to autocomplete
(defun indent-or-expand (arg)
"Either indent according to mode, or expand the word preceding point."
(interactive "*P")
(if (and
(or (bobp) (= ?w (char-syntax (char-before))))
(or (eobp) (not (= ?w (char-syntax (char-after))))))
(dabbrev-expand arg)
(tab-to-tab-stop)))
(defun my-tab-fix ()
(local-set-key [tab] 'indent-or-expand))
(add-hook 'as-mode-hook 'my-tab-fix)
(add-hook 'java-mode-hook 'my-tab-fix)
(add-hook 'c-mode-hook 'my-tab-fix)
(add-hook 'sh-mode-hook 'my-tab-fix)
(add-hook 'emacs-lisp-mode-hook 'my-tab-fix)
Aif> これには、「ヒッピーの拡張」が提供する以上のものが必要です。C/C++ をコーディングする場合、ECB http://ecb.sourceforge.net/を使用できますが、率直に言って、プロジェクトは完全に機能せず、このアドオンはあまり信頼できません。本当に優れたインテリジェントな補完が必要な場合は、Eclipse (CDT) を試してください。しかし、Python をコーディングする場合、Emacs (rope + flymake) は Eclipse (PyDev) と同じくらい優れています。
問題は、私の意見では、私が試したemacsの補完がコンテキストに関して完了していないということです。
たとえば、メソッド foobar() と引数 foo を使用して OOP を記述した場合、M-/ は foo と foobar の両方を提案します。
ただし、「foo」補完だけを提供するのではなく、オブジェクト メソッドを呼び出している場合はすばらしいでしょう。
誰にも解決策はありますか?