2009-07-08 102 views
4

我創建的C#代碼片段只能按Enter鍵才能結束,而通過自定義字段可以完成內置片段(如「struct」)。寫C#代碼段,以TAB結尾

這不是一個大問題,但它很煩人。我試圖將結構片段的整個XML複製到我自己的文件中,只替換了快捷方式的名稱。即使如此,我不得不按Enter鍵來完成插入。

任何想法,爲什麼這是這樣嗎?任何人都可以重現這種行爲嗎?

這裏是我嘗試寫的代碼片段:

<?xml version="1.0" encoding="utf-8" ?> 
<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet"> 
    <CodeSnippet Format="1.0.0"> 
    <Header> 
    <Title>cmd</Title> 
    <Shortcut>cmd</Shortcut> 
    <Description>Code snippet for ICommand</Description> 
    <Author>Andreas Larsen</Author> 
    <SnippetTypes> 
    <SnippetType>Expansion</SnippetType> 
    </SnippetTypes> 
</Header> 
<Snippet> 
    <Declarations> 
    <Literal> 
     <ID>name</ID> 
     <ToolTip>Command name</ToolTip> 
     <Default>My</Default> 
    </Literal> 
    </Declarations> 
    <Code Language="csharp"><![CDATA[public ICommand $name$Command 
    { 
    get 
    { 
    if (_$name$Command == null) 
     _$name$Command = new DelegateCommand($name$); 
    return _$name$Command; 
    } 
} 
$end$]]> 
    </Code> 
</Snippet> 
</CodeSnippet> 
</CodeSnippets> 

編輯: 正如卡爾·摹指出,Visual Studio的行爲是回車或只ESC鍵結束。通過TAB結束是ReSharper Live模板行爲。

+2

您可能會發現使用http://snipper.codeplex.com/,http://snippetdesigner.codeplex.com/,http://snippeteditor.codeplex.com/, – 2009-07-09 08:36:28

+0

等工具更容易。最後一個,這是VB – 2009-07-09 08:38:06

回答

1

我現在想通了。

我正在使用ReSharper插件,它似乎有一個覆蓋Visual Studio片段的實時模板功能。 ReSharper添加了TAB可用於在本機VS片段和其實時模板上完成片段的功能。

當我將自定義片段轉換爲活動模板時,我得到了我想要的行爲。 現在,我可以通過每個字段進行製作,並隨時更改它們,並通過TABing完成最後一個元素的片段。

對於那些有興趣的人來說,實時模板提供了更多功能豐富的片段功能。例如,您可以在字段上運行簡單的宏,以便在重新使用屬性名稱時,例如 支持字段可以具有小寫首字母(如果這是您的命名約定)。非常推薦的插件,如果你能負擔得起!

3

我只能得到結構片段提交按下輸入/轉義,但不是一個選項卡。我不認爲你想達到什麼是可能的(或者對於這個問題是合理的)。具有片段完成的慣例是按Enter或退出this is the documented behaviour

做其他事情是否會打破常規?您可以看到爲什麼在使用參數化片段(如)時該約定很有用。 Tabbing允許您多次修改這些值,然後您對自己的決定感到滿意並按下回車鍵。

+0

我想你是對的,但如果我有多個字段,我想通過它們進行選項卡,並且非常方便的保持選項卡以完成代碼段。特別是因爲內置的片段也支持這一點,所以對我來說這已經成爲一種自然行爲。 – angularsen 2009-07-08 07:59:20