I'd like to be able to cut/copy a string like "<strong>{0}</strong>" for example.
I'd like to then select some code such as "Hello, World" and then invoke a macro which will result in "<strong>Hello, World</strong>".
How could you do this?
Update: WHY do I want to do this?
I could just make a macro or shortcut to add something specific like a <strong> tag to a selection. However, my idea to create any sort of "surround with" paste behavior on the fly.
Fairly often, I paste in a list of fields or properties. So from somewhere else I get
PersonID
FirstName
LastName
And just as an example, I know I want to set those up as
FieldName = dataRow("FieldName").Value
With my magic macro, I could select the following and press CTRL+C to get it in my clipboard:
{0} = dataRow("{0}").Value
Then all I have to do is go line by line and apply my magic paste.
-
Wouldn't it be better to define a macro that added the 'strong' tags around the selected text? Then you could assign it to Ctrl+B or whatever.
Having to select both chunks of text and invoking the macro twice seems too much like hard work to me.
(maybe you need to explain why you want to do this)
-
You may want to read this article: http://www.viemu.com/a-why-vi-vim.html
And then start using VIM, or at least ViEmu ;)
As an alternative, you can develop your own Visual Studio Add-In. It's not that hard, and it will have the exact features that you neeed.
-
Fun little project.
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 ModuleI borrowed the clipboard code from here.
This does work. I tested it on a text file, copy your formatstring into the clipboard (ctrl-c), highlight the text you want to format, and then run the macro (i just doubleclicked it from the macro explorer but you could make a keyboard shortcut).
AMissico : Too complex, no error handling, and does not support undo. -
Instead of {0}, I use &. Assign macro to Ctrl+Q and you are all set!
' 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 comments:
Post a Comment