Visual Studio的“新范围”宏

时间:2011-01-13 02:16:28

标签: visual-studio macros visual-studio-macros

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

因此,例如,如果用户选择代码x = 0;并在以下代码中运行宏:

if (x != 0) x = 0;

应该变成:

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

(Snippets在这里没有帮助,因为这也需要适用于不受支持的源代码。)

有人可以帮我弄清楚如何正确地进行缩进和换行吗?这就是我所拥有的:

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

但是如何找出当前缩进并制作换行符?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

textDoc.Selection.Text =“\ n {\ n \ t”+ textDoc.Selection.Text +“\ n} \ n”

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

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

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

尝试选择开始,并在文档文本中使用该位置,查看该行并获取标签数量。

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