Самый быстрый способ вставить символы замены в Visual Studio
Автор вопроса: Howard PinsleyОтветов: 6
Я только начинаю изучать ASP.Net MVC и обнаруживаю, что пишу много ‹%= %> в представлениях. Intellisense предоставляет закрывающий %>, но я считаю, что печатать вступительный ‹%= обременительно (мне сложно их печатать :-)).
Я немного повозился с Rails и IDE NetBeans, где мне удалось ввести:
r<tab> - which would expand to <% %>
и
re<tab> - which would expand to <%= %>
Можно ли сделать что-то подобное в Visual Studio 2008 IDE?
Основной код выполнит одно из двух действий: если ничего не выбрано, он просто вставит кодовую конструкцию ‹%= %>, если у вас в данный момент что-то выделено в редакторе, он обернет этот код конструкцией E.G. ‹%= выбранный здесь код %>
Public Sub WrapMVC()
Try
DTE.UndoContext.Open("Wrap MVC")
Dim OutText As String = ""
Dim OutFormat As String = "<%={0} %>"
DTE.ActiveDocument.Selection.Text = String.Format(OutFormat, ActiveWindowSelection)
Finally
DTE.UndoContext.Close()
End Try
End Sub
Вспомогательные процедуры:
Friend Function ActiveWindowSelection() As String
If DTE.ActiveWindow.ObjectKind = EnvDTE.Constants.vsWindowKindOutput Then
Return OutputWindowSelection()
End If
If DTE.ActiveWindow.ObjectKind = "{57312C73-6202-49E9-B1E1-40EA1A6DC1F6}" Then
Return HTMLEditorSelection()
End If
Return SelectionText(DTE.ActiveWindow.Selection)
End Function
Private Function HTMLEditorSelection() As String
Dim hw As EnvDTE.HTMLWindow = ActiveDocument.ActiveWindow.Object
Dim tw As TextWindow = hw.CurrentTabObject
Return SelectionText(tw.Selection)
End Function
Private Function OutputWindowSelection() As String
Dim w As Window = DTE.Windows.Item(EnvDTE.Constants.vsWindowKindOutput)
Dim ow As OutputWindow = w.Object
Dim owp As OutputWindowPane = ow.OutputWindowPanes.Item(ow.ActivePane.Name)
Return SelectionText(owp.TextDocument.Selection)
End Function
Private Function SelectionText(ByVal sel As EnvDTE.TextSelection) As String
If sel Is Nothing Then
Return ""
End If
If sel.Text.Length <= 2 Then
SelectWord(sel)
End If
If sel.Text.Length <= 2 Then
Return ""
End If
Return sel.Text
End Function
Private Sub SelectWord(ByVal sel As EnvDTE.TextSelection)
Dim leftPos As Integer
Dim line As Integer
Dim pt As EnvDTE.EditPoint = sel.ActivePoint.CreateEditPoint()
sel.WordLeft(True, 1)
line = sel.TextRanges.Item(1).StartPoint.Line
leftPos = sel.TextRanges.Item(1).StartPoint.LineCharOffset
pt.MoveToLineAndOffset(line, leftPos)
sel.MoveToPoint(pt)
sel.WordRight(True, 1)
End Sub
Ответ 2 · рейтинг 4 · Chris Bowen - MSFT
Основываясь на комментарии, я дважды проверил приведенный ниже фрагмент ответа, и, к сожалению, он не работает в представлении HTML. Другой способ сделать это - через записанный макрос:
В веб-проекте начните запись: CTRL+SHIFT+R
Введите <%= %>, затем верните курсор между пробелами после "="
Остановить запись: CTRL+SHIFT+R
Вставьте макрос через CTRL+SHIFT+P
Этого может быть достаточно, но было бы лучше иметь его во всех проектах, плюс мы хотели бы более удобное сочетание клавиш, чем CTRL+SHIFT +P:
Сохраните макрос: Инструменты->Макросы->Сохранить временный макрос, дав ему имя
Bind it to a keystroke combination:
Tools->Options, and choose the Keyboard node
Найдите имя, которое вы выбрали
Введите комбинацию клавиш (например, ALT+A) и нажмите OK.
Теперь вы можете нажать сочетание клавиш (например, ALT+A) в представлении HTML, он вставит ‹%= %> и поместит курсор в теги, готовые для Вход.
[Старый ответ: к сожалению, не работает в режиме HTML.]
Для фрагмента кода создайте файл фрагмента XML (например, "asp.snippet") с именем, ярлыком и расширением, затем используйте "Инструменты" -> "Диспетчер фрагментов кода", чтобы добавить папку, в которой хранится фрагмент.
Вот XML для фрагмента, который (через "asp[tab][tab]") расширяет "‹%= [code] %>"
Кстати, в VS есть фрагмент для создания фрагментов. Просто откройте новый файл XML, затем щелкните правой кнопкой мыши и выберите "Вставить фрагмент" -> "Фрагмент".
Ответ 3 · Tom Ritter
Я считаю, что фрагменты кода подойдут. .
Ответ 4 · plinth
Я обнаружил, что проще написать макрос, а затем связать его с командой клавиатуры.
Я использую Tools->Macros->Macro Explorer, чтобы увидеть, что там есть, и вы можете создать новый модуль и добавить макрос для внедрения своего кода. Затем вы привязываете его к клавише с помощью Инструменты-> Настроить-> Клавиатура...
Поскольку это не слишком отличается от того, что вы делаете, вот макрос для ввода исходной команды с датой и именем пользователя - VBScript - я не стал искать другие альтернативы.
Imports System
Imports EnvDTE
Imports EnvDTE80
Imports EnvDTE90
Imports System.Diagnostics
Public Module Module1
Private Function GetUserName() As String
GetUserName = System.Environment.UserName
End Function
Sub InjectChangeComment()
ActiveDocument().Selection().Text = "// " + System.DateTime.Now.ToString("MM-dd-yy") + " " + GetUserName() + vbTab + vbTab + vbTab
End Sub
End Module
Ответ 5 · Haacked
Фрагменты кода в представлении HTML не работают. Он намечен для следующей версии Visual Studio. На данный момент я бы посмотрел на подход Macro или посмотрел, позволяют ли другие инструменты использовать фрагменты в редакторе HTML.
Ответ 6 · anonym0use
Одним из хороших инструментов, который позволит вам это сделать, является Resharper. Вы можете создавать свои собственные шаблоны, которые будут делать то, что вам нужно, но также будут окружены тегами. Есть целый ряд функций и стоит того по цене.