2010-02-03 13 views
5

In VS 2008, ci sono frammenti di codice XML che sembrano abbastanza fantastici :) Tuttavia, sembra che i frammenti creati non indentino correttamente. Per esempio, se abbiamo il seguente codice:Rientro di frammenti di codice di VS 2008

{ 
    ... 
    { 
    ... 
     { 
      InsertSnippet here. 

Abbiamo ottenere qualcosa di simile:

{ 
    ... 
    { 
    ... 
     { 
      FirstLineofSnippet 
SecondLineOfSnippet 
ThirdLineOfSnippet 

Esiste un modo per fare in modo che tutte le linee di mantenere lo stesso rientro?

+4

'Ctrl-K, D' farà il trucco =) –

+0

@Rubens - nessuno ha un'idea migliore, quindi rispondi e ti darò credito per la risposta corretta. – Daniel

+0

teniamolo per qualche altro giorno; puoi creare una taglia in un paio di giorni e, forse, qualcun altro presentarsi con un'idea. –

risposta

0

incollare la prima riga senza rientro, quindi selezionare il blocco e la scheda fino a ottenere l'intero blocco sul rientro desiderato. AFAIK quello che vedi è il comportamento standard e succede perché la posizione da cui si incolla non è rientrata per quanto desiderato.

0

Il mio unit test snippet sembra rientrare correttamente. Potrebbe essere dovuto al fatto che il codice è stato inserito in un blocco CDATA. VisualStudio tende anche ad auto-formattare il blocco non appena viene aggiunto al codice. Il tuo snippet ha tante parentesi aperte come quelle di chiusura? Se i due corrispondono, e lo snippet viene inserito in una posizione valida/compilabile, dovrebbe essere formattato automaticamente.

0

Prova swithing Insert spaces-Keep tabs in Tools>Options>TextEditor>C#>Tabs, ha funzionato per me.

0

Sembra che Visual Studio esegua un formato automatico sulle linee inserite. Il mio snippet non è stato formattato correttamente (cioè rientrato), né per l'inserimento di frammenti, né per il formato manuale (Ctrl-K-F). Conteneva "delegato {...}", forse il formattatore non può gestirlo.

4

Questo di solito indica che il codice che si sta inserendo è semanticamente errato - al momento dell'inserimento, non quando sono stati inseriti i valori dei frammenti.

Per evitare questo, è possibile utilizzare i valori predefiniti nello snippet per correggere la sintassi corretta. Per esempio. di dichiarare una lista di argomenti per una funzione:

<Literal Editable="true"> 
    <ID>methodArguments</ID> 
    <ToolTip>methodArguments</ToolTip> 
    <Default>params object[] args</Default> 
    <Function> 
    </Function> 
</Literal> 

Il <Default> Element fornisce la dichiarazione. Quindi, utilizzando questo in un frammento di dichiarare un funciton porterà a questo:

public void FunctionName(params object[] args) { } 

E poi consente di sostituire params object[] args con qualsiasi argomento dichiarazioni si ha bisogno.

Problemi correlati