簡體   English   中英

理解Emacs完成模式選擇

[英]Making sense out of Emacs completion mode choices

似乎有許多替代Emacs自動完成機制。 如果沒有詳盡的搜索,我會想到以下內容:ido,自動完成,冰柱,緩沖區完成,迷你緩沖區完成和標准開箱即用完成。 然后是代碼完成。 很多。 而且大部分都依賴於語言。 擁有一個或三個Emacs大師在代碼和非代碼自動完成中總結主要參與者的好處是非常有用的。 這就是Stack Overflow,毫無疑問,確定最適合Emacs IDE類機制的自動完成模式會更好。

更新 :我剛剛發現Emacs Wiki完成頁面 ,它放大了我的基本問題:所有這些選擇,什么是好的,什么不太好,如果你只能玩2-3,你會推薦嗎?

Wrt 冰柱 -

在大多數情況下,冰柱是關於迷你緩沖區的完成。 在一些情況下,它提供了緩沖區內(例如代碼)完成的東西,但它主要是關於迷你緩沖區完成。

當大多數人想到迷你緩沖區完成時,他們會想到文件名完成,緩沖區名稱完成和命令名稱完成。 但是,有很多更給它。

作為Emacs-Lisp程序員,您可以在任何地方使用完成,以便用戶以交互方式進行選擇。 這很普遍!

完成實際上是關於模式匹配來定義集合 ,然后您可以操作它們。

大多數人認為迷你緩沖區完成的唯一目的是選擇一個名稱(文件,緩沖區,命令,變量......)。 但是,完成的強大功能實際上是以不同的方式過濾並可能對整套文件名,緩沖區名稱等進行排序,然后讓用戶對結果 (不一定是單個對象)執行某些操作。

這就是Icicles的用法 :讓你動態(逐步)使用模式匹配來定義集合 ,然后對選定的成員或這些集合的所有成員進行操作。

這不是Ido或其他完成包的目的,可能除了Helm(Anything)

不像頭盔(任何) ,其權限對象在對象類型,並為出發點的動作名稱 ,在冰柱您通常調用命令做一些事情給定類型的一個或多個對象(例如緩存), 然后縮小這些對象的集合,通常通過名稱匹配。 Icicles中通常情況下,您可以在同一命令中以多種但相關的方式對這些對象進行操作。

Helm(Anything)中 ,通常您的輸入首先按對象名稱與所有類型的整個對象對象進行匹配 ,然后縮小以選擇要執行的某些操作。

最后,請記住,各種完成方法中的每一種都為最終用戶提供了某些內容(例如命令),並為程序員提供了某些內容(例如完成功能)。

如果您正在完成代碼,那么您通常只想在點完成名稱 代碼完成的主要好處是確定適當的候選者是什么。 為此,文本(例如代碼)上下文通常是非常重要的。 為了提供明智的選擇,完成功能需要分析上下文(代碼),包括任何包含上下文(例如項目代碼)。

另一方面,Minibuffer完成可用於任何類型的選擇和操作,包括具有多個動作的多選。 在這里,所有部分都很有趣:提供什么候選人,你可以用它們做什么,等等。

不知道Dunno是否有幫助,但無論如何這都是我的看法。

我通常使用兩個完成包(除了迷你緩沖區和comint緩沖區中的內置TAB完成)。

pabbrev.el - 在光標處提供建議(按TAB鍵)接受。 通過查看單詞頻率來做出選擇。 我喜歡這個,因為可以看到完成的內容 - 但它主要適用於一次完成。

嬉皮 - 擴展 - 這通常與M- /代替dabbrev綁定,因為它完成了dabbrev所做的所有事情。 當您可能需要循環使用某些替代方法,或者您想要完成文件名或其他內容時,這種方法很有效。

我喜歡這兩個因為它們不需要任何鼠標移動並且工作很快。

我在迷你緩沖區中使用標准選項卡完成文件名, Mx命令和其他東西。

我還經常使用M-/擊鍵( dabbrev-expand )動態完成任何Emacs緩沖區中的任何單詞。 這太棒了,特別是對於長變量名稱。 這是文檔:

M-/ runs the command dabbrev-expand, which is an interactive
autoloaded Lisp function in `dabbrev.el'.

It is bound to M-/.

(dabbrev-expand ARG)

Expand previous word "dynamically".

Expands to the most recent, preceding word for which this is a prefix.
If no suitable preceding word is found, words following point are
considered.  If still no suitable word is found, then look in the
buffers accepted by the function pointed out by variable
`dabbrev-friend-buffer-function'.

A positive prefix argument, N, says to take the Nth backward *distinct*
possibility.  A negative argument says search forward.

If the cursor has not moved from the end of the previous expansion and
no argument is given, replace the previously-made expansion
with the next possible expansion not yet tried.

The variable `dabbrev-backward-only' may be used to limit the
direction of search to backward if set non-nil.

See also `dabbrev-abbrev-char-regexp' and C-M-/.

您可以查看可以使用不同完成源(包括CEDET)的公司模式或自動完成包,它們還允許定義新的完成源...對於某些編程語言,您可以直接使用CEDET ...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM