1

我正在尝试创建一个新宏,它采用当前选定的文本并在其周围放置花括号(在换行之后),当然,根据需要缩进。

因此,例如,如果用户选择代码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

但是我如何找出当前的缩进并换行呢?

4

2 回答 2

2
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
于 2011-01-27T23:39:02.707 回答
0

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

当然 { 和 } 和 Selection 之前的 \t 数量取决于当前缩进。

由于选定的文本数据和文档数据之间存在差异,因此很难找出光标在文档数据中的位置(至少在 Outlook 中是这样)。

我想出如何在 Outlook 中执行此操作的唯一方法是实际向后移动选择,直到获得所需的文本,但这会导致不良影响。

尝试从选择开始,并使用文档文本中的该位置,查看该行并获取选项卡的数量。

我认为 VStudio 中不会有格式化字符。

于 2011-01-24T19:14:06.447 回答