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 に答える