2009-11-24 117 views
9

智能感知對於它的功能很好,但我經常發現自己渴望像Vim這樣的編輯「粗糙」的文本完成。我似乎無法找到一個能夠完成一個單詞的工具 - 可能是在一個字符串中,任何地方都可以 - 然後讓VS爲我完成它(基於之前在當前緩衝區中鍵入的內容,或者在所有打開的文件中,或者它想要工作)。在Visual Studio中啞完成

我錯過了什麼嗎? (或者如果有必要,是否有擴展來做到這一點?)看起來它實際上比Intellisense更容易實現,但它確實可以節省打字。

謝謝!

+1

有趣的想法。我有時候會發現自己輸入的是幾乎相同的長字符串文字,像這樣的東西比複製/粘貼更容易。 – 2009-12-07 22:41:07

回答

5

您可能想看看VisualAssist加載項。它的自動完成功能知道您最近輸入的內容,所以它默認選擇最近的匹配。它還可以在比標準智能感知更多的地方工作(例如包含路徑)。

不過提醒一句,當你開始使用它,這是很難回去......

+0

找不到如何自動完成字符串文字,我錯過了什麼? – 2015-06-28 04:50:41

+0

@VincentXue:據我所知,除了**包含路徑之外,Visual Assist不會自動完成字符串文字**。 – 2015-08-18 10:07:06

1

在VS2010實現智能感知是非常容易的 - 假設你有2個問題一個現成的答案:

  1. 我應該觸發對話框
  2. 什麼是當前單詞可能的補全列表。

在我的自定義編輯,我就使NDjango解析器給我我需要什麼,只有10%的實際花費90%的時間「實現」智能感知

編輯

項目開放源代碼隨時歡迎download的代碼,並與它一起玩。

+0

夠公平,但這確實不需要涉及智能感知。也就是說,我不需要「代碼完成」,只需根據我之前鍵入的單詞完成簡單的文本完成,因此我不需要再次鍵入它們。 (另外請注意,除標準智能感知之外,還必須提供此功能;我不打算完全替換代碼完成。) – 2009-11-24 20:05:09

+2

我明白你想要什麼,我不知道是否有任何類型的東西已經存在,我想說的是,實現自己的版本會非常容易,包括代碼完成補充(而不是替代)現有版本的非常有效的一點。這裏的要點是,無論您的文本完成方式多麼容易和明顯,下一個人將對自己的工作方式有自己的想法 – mfeingold 2009-11-24 20:38:31

+0

您仍需要連接編輯器的IntelliSense API,因爲這是提供完成列表等......但是讓它列出緩衝區中的所有其他單詞是相當簡單的。特別是如果您將VS2010的目標定位於更加完善的新編輯器擴展性API。 – 2009-12-08 20:39:17

0

2010年的可擴展性模型要簡單得多,但(顯然)仍然是一個移動目標。

應該可以使用the intellisense part of this 提供一個ICompletionSource其合併在要與現有的實現結果一起提供的任何值得到的東西簡單。

監視名稱的當前緩衝區應該涉及到一些玩弄ITextViewITextBuffer

有一個修改codeplex上的presentation layer的例子,但你應該能夠使用它作爲嘗試改變事物數據端的基礎。

1

在其他的答案說,智能感知在Visual Studio 2010有了很大的改善。不僅是可擴展性,還有實現。

它現在過濾包含他們任何地方的鍵入名稱的成員列表。這也適用於類和類型,所以你不必記住完整的類型或類名。最後並非不重要,您可以使用Pascal Case命名模式來過濾列表。這意味着減少打字和減少錯誤。

有關VS2010中Intellisense改進的更多信息,請參閱ScottGu's blog

1

CodeRush顯示關於完成字符串或其他地方的單詞的建議。他們有一個免費版本,但我不知道它是否支持此功能。來自Jetbrains的

0

Resharper也具有非常智能的完成。 CTRL + SHFIT + Space激活其「智能」代碼完成(超出正常的CTRL +空格結果),這是類型和上下文敏感的。我經常發現它爲我選擇合適的名字。

0

如果你有幾個詞你要填寫,你可以很容易地創建一些片段來做到這一點。

這不僅僅是一種破解,它可能會有幫助。

段XML:

<?xml version="1.0" encoding="utf-8" ?> 
<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet"> 
    <CodeSnippet Format="1.0.0"> 
    <Header> 
     <Title>retype</Title> 
     <Shortcut>retype</Shortcut> 
     <SnippetTypes> 
     <SnippetType>Expansion</SnippetType> 
     </SnippetTypes> 
    </Header> 
    <Snippet> 
     <Code Language="csharp"> 
     <![CDATA[ThisIsTheTextIHateToRetype();$end$]]> 
     </Code> 
    </Snippet> 
    </CodeSnippet> 
</CodeSnippets>