Макрос Visual Studio для вставки похож на String.Format - PullRequest
2 голосов
/ 20 марта 2009

Я бы хотел иметь возможность вырезать / копировать строку, например " {0} ".

Я хотел бы затем выбрать некоторый код, такой как «Hello, World», а затем вызвать макрос, который приведет к « Hello, World ».

Как ты мог это сделать?

Обновление: ПОЧЕМУ я хочу это сделать?

Я мог бы просто создать макрос или ярлык, чтобы добавить что-то конкретное, например тег , к выделению. Тем не менее, моя идея создать любое поведение «окружить» вставкой на лету.

Довольно часто я вставляю в список полей или свойств. Итак, откуда-то еще я получаю

PersonID
FirstName
LastName

И в качестве примера, я знаю, что хочу установить их как

FieldName = dataRow("FieldName").Value

С помощью моего волшебного макроса я могу выбрать следующее и нажать CTRL + C, чтобы получить его в своем буфере обмена:

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

Тогда все, что мне нужно сделать, - это построчно и применить мою магическую пасту.

Ответы [ 3 ]

1 голос
/ 20 марта 2009

Веселый маленький проект.

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

Я позаимствовал код буфера обмена отсюда .

Это работает. Я проверил его в текстовом файле, скопировал строку формата в буфер обмена (ctrl-c), выделил текст, который вы хотите отформатировать, и затем запустил макрос (я просто дважды щелкнул по нему из проводника макросов, но вы можете сделать сочетание клавиш) .

0 голосов
/ 03 сентября 2009

Вместо {0} я использую &. Назначьте макрос для 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
0 голосов
/ 20 марта 2009

Не лучше ли определить макрос, добавляющий «сильные» теги вокруг выделенного текста? Затем вы можете назначить его Ctrl + B или как угодно.

Необходимость выделить оба фрагмента текста и дважды вызвать макрос кажется мне слишком тяжелой работой.

(может быть, вам нужно объяснить почему вы хотите это сделать)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...