2009-03-19 8 views
2

"< strong> {0} </strong>"のような文字列を切り取り/コピーできます。Visual StudioマクロをString.Formatと似て貼り付けます

「Hello、World」などのコードを選択し、「< strong> Hello、World </strong>」というマクロを呼び出したいとします。

どうすればいいですか?

更新:どうしたらいいですか?

< strong>タグのような特定のものを選択に追加するためのマクロまたはショートカットを作成することができます。しかし、私の考えは、その場でペーストの動作を「サラウンド」で作成することです。

かなりの頻度で、フィールドやプロパティのリストを貼り付けます。だから、どこかから私は

PersonID 
FirstName 
LastName 

を取得し、単なる一例として、私は私の魔法マクロで

FieldName = dataRow("FieldName").Value 

としてそれらを設定したい知って、私は次の項目を選択し、CTRL + Cを押すことができます私のクリップボードにそれを得るために:

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

それから私がしなければならないすべては、ラインごとに行くと私の魔法のペーストを塗布します。

答えて

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)、フォーマットしたいテキストを強調表示してからマクロを実行します(マクロエクスプローラからダブルクリックしましたが、 。

+0

あまりにも複雑でエラー処理はなく、取り消しをサポートしていません。 – AMissico

+1

@AMissico、これはWriteMyEntireProgramForMe.comではありません。そうです、エラー処理や他のさまざまな「良いプログラマーの実践」なしで、何かを行う方法の基本を示す不完全なコードスニペットが標準です。リーダー/質問者のために。 –

0

選択したテキストの周りに「強い」タグを追加したマクロを定義する方が良いのではないでしょうか?次にCtrl + Bなどに割り当てることができます。

テキストの両方のチャンクを選択してマクロを2回呼び出すのは、あまりにも難しい作業です。

(多分あなたはは、あなたがこれをしたい理由を説明する必要があります)

0

{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 
関連する問題