0

視覚化のために、「_」が実際には空白であると偽ってください。

次のことを考慮してください

/*!
____This_is_a_comment_about_a_function
____and_its_purpose
____and_arguments
____and_things_of_that_ilk
*/

私がやりたいのは、そのテキストのチャンクを選択し、ボタンを押して、ワモ!この形に変更されます。

/*!____________________________________
____This_is_a_comment_about_a_function_
____and_its_purpose____________________
____and_arguments______________________
____and_things_of_that_ilk_____________
_____________________________________*/

なぜこれが欲しいのですか? 2番目の形式は、コードを確認するときに目の疲れを和らげます。私にとっては、何かをしなければならないという問題は十分にあります。

これまでに何を試しましたか? 主にマクロの例をグーグルで検索します。生産的かもしれない方向性を示唆するものは何も現れていません。マクロのアイデアを理解しようとすると少し苦労します。SOでここを検索している人もいます

私の質問は何ですか?

リンクを教えてもらえますか?私にヒントをください?当ててみて?これを行う方法を理解するために私が何を研究する必要があるかについて。

ご清聴ありがとうございました。

悪。

4

2 に答える 2

1

マクロを使用して選択したテキストを取得および置換するマクロの例、および文字列のパディングに相当するマクロを探しましたか?これらの3つを組み合わせて、各行をループし、元の選択を置き換える最終的な文字列を作成できると思います。

擬似コード:

selText = getSelectedText();
selTextSplit = selText.split("\n");
selTextPadded = "";
for (i = 0; i < selTextSplit.length; i++) {
    selTextPadded += selTextSplit[i].padRight(80, ' ') + "\n";
}
replaceSelectedText(selTextPadded);
于 2011-06-18T17:05:33.007 に答える
0

これが私が考え出したことです。私を生産的な方向に向けてくれたJaredに感謝します。

Sub FormatEvil()

Try
    DTE.UndoContext.Open("Evil Style C Comment Padder")

    Dim txtSel As TextSelection = DTE.ActiveDocument.Selection

    Dim currText As String = txtSel.Text

    If currText.Trim.StartsWith("/*") AndAlso currText.Trim.EndsWith("*/") Then

        Dim splitText() As String = Split(currText, vbCrLf)

        ' Trim all of the lines down
        For z = 0 To UBound(splitText) - 1
            splitText(z) = Trim(splitText(z))
        Next

        ' How long should the block be?
        Dim longestLine As Integer = 0
        For z = 0 To UBound(splitText) - 1
            If splitText(z).Length > longestLine Then
                longestLine = splitText(z).Length
            End If
        Next

        longestLine += 4

        ' build the value to replace the selection with.
        Dim selTextPadded As String = "/*    "
        selTextPadded = selTextPadded.PadRight(longestLine + 2) + vbCrLf

        For z = 1 To UBound(splitText) - 2
            splitText(z) = splitText(z).PadRight(longestLine - 2)
            selTextPadded += "    " + splitText(z).ToString() + vbCrLf
        Next

        splitText(UBound(splitText) - 1) = splitText(UBound(splitText) - 1).PadRight(longestLine - 2)
        selTextPadded += "    " + splitText(UBound(splitText) - 1).ToString() + vbCrLf

        Dim tmp As String = "*/"
        selTextPadded += tmp.PadLeft(longestLine + 2) + vbCrLf

        txtSel.Delete() 'This is to help keep formatting correct when multiline
        txtSel.Insert(selTextPadded, vsInsertFlags.vsInsertFlagsContainNewText)
    Else
        ' This is not a c comment
    End If
Finally
    DTE.UndoContext.Close()
End Try
End Sub
于 2011-06-21T02:55:18.023 に答える