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_____________
_____________________________________*/

我为什么要这个? 第二种形式可以缓解我在查看代码时的眼睛疲劳。对我来说,应该做点什么就够了。

到目前为止我尝试了什么? 主要是在谷歌上搜索宏示例。没有任何迹象表明可能是富有成效的方向。试图理解宏 ide 有点费力。一些在这里搜索 SO

我的问题是什么?

你能指点我的链接吗?给我一个提示?猜一下?关于我需要研究什么来弄清楚如何做到这一点。

感谢您的关注。

邪恶的。

4

2 回答 2

1

您是否寻找过使用宏获取和替换选定文本的宏示例,以及字符串填充的宏等价物?我认为这三件事可以结合起来,在每一行上都有一个循环来构造最终的字符串来替换原来的选择。

伪代码:

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 回答