要粘贴的Visual Studio宏类似于String.Format

时间:2009-03-19 22:08:30

标签: visual-studio macros

我希望能够剪切/复制像“< strong> {0}< / strong>”这样的字符串例如。

然后我想选择一些代码,例如“Hello,World”,然后调用一个宏,这将导致“< strong> Hello,World< / strong>”。

你怎么能这样做?

更新:为什么我要这样做?

我可以创建一个宏或快捷方式来添加特定内容,例如< strong>标记到选择。但是,我的想法是动态创建任何类型的“环绕”粘贴行为。

通常,我会粘贴一个字段或属性列表。所以从其他地方我得到

PersonID
FirstName
LastName

作为一个例子,我知道我想把它们设置为

FieldName = dataRow("FieldName").Value

使用我的魔术宏,我可以选择以下内容并按CTRL + C将其放入剪贴板中:

{0} = dataRow("{0}").Value

然后我要做的就是逐行去并使用我的魔术贴。

3 个答案:

答案 0 :(得分:1)

有趣的小项目。

Option Strict Off
Option Explicit Off
Imports System
Imports EnvDTE
Imports EnvDTE80
Imports EnvDTE90
Imports System.Diagnostics

Public Module StringFormatModule

    Private clipText As String

    Public Property ClipboardText() As String
        Get
            RunThread(AddressOf GetClipboardText)
            Return clipText
        End Get
        Set(ByVal value As String)
            clipText = value
            RunThread(AddressOf CopyToClipboard)
        End Set
    End Property

    Private Function RunThread(ByVal fct As Threading.ThreadStart)
        Dim thread As New Threading.Thread(fct)
        thread.ApartmentState = Threading.ApartmentState.STA

        thread.Start()
        thread.Join()
    End Function

    Private Sub GetClipboardText()
        clipText = My.Computer.Clipboard.GetText()
    End Sub

    Private Sub CopyToClipboard()
        My.Computer.Clipboard.SetText(clipText)
    End Sub

    Sub FormatSelectedTextWithCopiedText()
        Dim formatString As String

        formatString = ClipboardText

        Dim token As String
        Dim selectedText As TextSelection
        selectedText = DTE.ActiveDocument.Selection
        token = selectedText.Text
        selectedText.Text = String.Format(formatString, token)
    End Sub
End Module

我借用了剪贴板代码from here

这确实有效。我在一个文本文件上测试它,将您的格式字符串复制到剪贴板(ctrl-c),突出显示要格式化的文本,然后运行宏(我只是从宏浏览器双击它,但你可以创建一个键盘快捷键)

答案 1 :(得分:0)

定义一个在所选文本周围添加“强”标签的宏不是更好吗?然后你可以将它分配给Ctrl + B或其他任何东西。

必须选择两个文本块并调用两次宏似乎对我来说太辛苦了。

(也许你需要解释为什么你想要这样做)

答案 2 :(得分:0)

而不是{0},我使用&amp ;.将宏指定给Ctrl + Q,你就完全了!

' Wraps the current selection with the specified text. Use the & character as the anchor for the selected text.
Public Sub WrapSelection()
    Dim selection As TextSelection = DirectCast(DTE.ActiveDocument.Selection, TextSelection)
    DTE.UndoContext.Open("Wrap Selection")

    Try
        Dim sInput As String = InputBox("Wrap(&&, state)")
        If Len(sInput) > 0 Then
            Dim sContent As String = selection.Text
            Dim iStart As Integer = InStr(sInput, "&") - 1
            Dim iEnd As Integer = InStrRev(sInput, "&")
            selection.Insert(sInput.Substring(0, iStart) + sContent + sInput.Substring(iEnd), vsInsertFlags.vsInsertFlagsContainNewText)
            'selection.Insert(sInput.Substring(iEnd), vsInsertFlags.vsInsertFlagsInsertAtEnd)
        End If

    Catch ex As Exception
        DTE.UndoContext.SetAborted()
        MsgBox(ex.Message)

    Finally
        'If an error occured, then need to make sure that the undo context is cleaned up.
        'Otherwise, the editor can be left in a perpetual undo context
        DTE.UndoContext.Close()

    End Try

End Sub