Макрос «Новая сфера» для Visual Studio - PullRequest
1 голос
/ 13 января 2011

Я пытаюсь создать новый макрос, который берет выбранный в данный момент текст и помещает вокруг него фигурные скобки (после создания новой строки), в то же время, при необходимости, делая отступы.

Так, например, если пользователь выбирает код x = 0; и запускает макрос в следующем коде:

if (x != 0) x = 0;

Это должно превратиться в:

if (x != 0) 
{
    x = 0;
}

(Фрагменты здесь не помогают, потому что это также должно работать для неподдерживаемого исходного кода.)

Может ли кто-нибудь помочь мне понять, как правильно выполнять отступы и переносы строк? Вот что у меня есть:

Public Sub NewScope()
    Dim textDoc As TextDocument = _
                CType(DTE.ActiveDocument.Object("TextDocument"), TextDocument)
    textDoc.???
End Sub

а как узнать текущий отступ и сделать новую строку?

Ответы [ 2 ]

2 голосов
/ 28 января 2011
Sub BracketAndIndent()
    Dim selection = CType(DTE.ActiveDocument.Selection, TextSelection)

    ' here's the text we want to insert
    Dim text As String = selection.Text

    ' bracket the selection;
    selection.Delete()

    ' remember where we start
    Dim start As Integer = selection.ActivePoint.AbsoluteCharOffset

    selection.NewLine()
    selection.Text = "{"
    selection.NewLine()
    selection.Insert(text)
    selection.NewLine()
    selection.Text = "}"

    ' this is the position after the bracket
    Dim endPos As Integer = selection.ActivePoint.AbsoluteCharOffset

    ' select the whole thing, including the brackets
    selection.CharLeft(True, endPos - start)

    ' reformat the selection according to the language's rules
    DTE.ExecuteCommand("Edit.FormatSelection")
End Sub
0 голосов
/ 24 января 2011

textDoc.Selection.Text = "\ n {\ n \ t" + textDoc.Selection.Text + "\ n} \ n"

Конечно, количество \ t перед {и}и Выбор зависит от текущего отступа.

Поскольку существует разница между выбранными данными текста и документа, трудно определить, где находится курсор в данных документа (по крайней мере, в Outlook это).

Единственный способ выяснить, как это сделать в Outlook, - это на самом деле переместить выделение назад, пока я не получу нужный текст, но это привело к нежелательным эффектам.

Попробуйте начать выбор,и используя эту позицию в тексте документа, глядя на эту строку и получая количество вкладок.

Я думаю, в VStudio не будет форматирования символов.

...