2011-10-17 49 views
5

有一種未列在vim幫助文件(特別是:insert.txt)中的完成類型,但我本能地經常感覺需要它。假設我的文件中有「Awesome」和「SuperCrazyAwesome」兩個字。我發現Awesome的一個實例應該是SuperCrazyAwesome,所以我跳到單詞的開頭,進入插入模式,然後輸入「SuperCrazy」。vim中的內部代碼完成

我覺得我應該可以輸入「S」,創建「SCrazy」,然後只需點擊一個完成快捷鍵或兩個鍵,讓它找到光標左側的什麼(「S」),什麼是正確的(「Crazy」),將此文件與文件中的所有單詞(「/ S \ w * Crazy /」)進行正則表達,併爲我提供一個選項的完成彈出菜單,或者只有一個匹配時執行替換。

我想爲此使用實際的完成系統。存在使用函數的「用戶定義」完成,並且在從給定列表中替換的幫助中有一個很好的例子。然而,我似乎無法追查我需要做的事情的許多細節,包括:

  1. 如何從vim函數獲取文件中所有單詞的列表?
  2. 我可以列出所有緩衝區中的單詞(帶有文件名)嗎,因爲vim的完整嗎?
  3. 如何在插入模式下獲取光標前/後的單詞中的文本?
  4. 可以完成替換整個單詞,而不僅僅是光標?

我已經在這裏幾個小時了。我一直打到死角,像this one,它向我介紹\%#與光標位置匹配,這似乎不適合我。例如,搜索\ w * \%#只會返回單詞的第一個字符,無論我在哪裏。 \%#似乎不是主播。

+0

不嚴格相關,但您可能會從[this](http://stackoverflow.com/questions/6548541/camelcase-expansion-in-vim-like-intellij-idea/6550628#6550628)得到一些提示。有一些示例函數可用於從當前文件生成單詞列表以及自定義完成功能。我會在今天晚些時候嘗試發佈答案。 –

+0

您的鏈接看起來很有趣並且數據豐富。我會挖掘它。謝謝你的幫助。 –

回答

0

雖然它並不完全遵循您以前所需的方法,但我寫了https://github.com/mjbrownie/swapit如果您正在尋找相關的關鍵字,它可能會執行您的任務。如果你有幾百場比賽,它會在這種情況下下降。

它主要用於2-10種可能的測序匹配。

你會定義一個列表

:SwapList,特效真棒MoreAwesome SuperCrazyAwesome FullyCompletelyAwesome UnbelievablyAwesome

,並通過與增量器decrementor鍵(C + A)(C + X)

還有的配招也是一些其他騎自行車類型的插件,比如我在vim.org和github上看到的交換單詞。

這裏的優點是您不必將單詞與正則表達式組合在一起。

+0

感謝您的鏈接,邁克爾。我得看看它。你見過vim自帶的敘詞表完成東西嗎?今天我在搜索中遇到了這個問題,以解決我列出的問題。它可以讓你定義相關的詞,我想在一個類似的詞庫文件中,然後通過它們與通常的/熱鍵進行匹配。 –

+0

我曾經有過但並沒有真正想過將它用於代碼庫。好主意。您可能仍然會發現swapit對於臨時重構非常有用,因爲您正在瀏覽設置文件並將SomeKeyword替換爲AnotherKeyword以查看一些但不是全部關鍵字。當你需要它時,你只需要設置列表go /關鍵字並去(c + a)... n ... n.n..n。(c + a),而不需要將列表添加到文件中。 – michael

+0

聽起來像它肯定可以幫助。謝謝! –

0

我寫了類似那年前的第三方庫,每個組件的每個函數都有不同的CamelCasePrefixes。但是在Git Hub之前的時代,我認爲它是一顆迷失的寶石,但搜索引擎說我不是一個完整的屁股,並將它發佈到Vim wiki。

這就是:http://vim.wikia.com/wiki/Custom_keyword_completion

只是不要問我什麼是MKW「的意思。不知道。

這將需要一些適應您的需求,因爲它只查找單詞到光標,但這個想法就在那裏。它僅適用於當前緩衝區。遍歷所有緩衝區會很慢,因爲它不會創建任何索引。爲了這些目的,我會使用外部grep。