【问题标题】:"New Scope" Macro for Visual StudioVisual Studio 的“新范围”宏
【发布时间】:2011-01-13 02:16:28
【问题描述】:

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

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

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

【问题讨论】:

  • ...真的吗?我不敢相信我为此得到了一个风滚草徽章,哈哈……看起来很简单。希望赏金有所帮助。 :)
  • 我知道这并不能回答您的问题,但如果有人想知道,请使用 Resharper - 这是由 Ctrl+E+U, 7 (Surround With {}) 完成的

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


【解决方案1】:
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

【讨论】:

  • 啊,谢谢,这正是我想要的。另一个问题(虽然这个问题不那么重要):有没有办法做到这一点而不修改撤消缓冲区?
  • 我猜您实际上并不想让撤消缓冲区保持原样。相反,您希望能够一步撤消宏的效果(而不是为宏执行的每个文本操作都按 ctrl+z)。在这种情况下,请在宏启动时打开一个UndoContext,并在它退出之前将其关闭。然后,您只需按一次 ctrl+z 即可撤消您的宏。
【解决方案2】:

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

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

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

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

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

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

【讨论】:

  • 问题的字面意思是“我如何找出当前的缩进并换行”?抱歉,但您的回答并没有真正告诉我如何计算当前缩进并使换行符缩进相同的数量。 :(
猜你喜欢
  • 2023-03-12
  • 2018-01-21
  • 1970-01-01
  • 1970-01-01
  • 2015-09-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多