Самый быстрый способ вставить заменяющие символы в Visual Studio

Я только начинаю изучать ASP.Net MVC и обнаруживаю, что пишу много <% =%> в представлениях. Intellisense предоставляет закрывающий%>, но я считаю, что ввод вводного <% = обременительным (мне их сложно набрать :-)).

Я немного поигрался с Rails и IDE NetBeans, где смог набрать:

r<tab>  - which would expand to <%  %>

и

re<tab>  - which would expand to <%= %>

Можно ли сделать что-то подобное в IDE Visual Studio 2008?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
0
912
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

Я считаю, что Фрагменты кода подойдет всем.

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

Я использую Инструменты-> Макросы-> Обозреватель макросов, чтобы посмотреть, что там есть, и вы можете создать новый модуль и добавить макрос для внедрения вашего кода. Затем вы привязываете его к клавише с помощью Tools-> Customize-> Keyboard ...

Поскольку это не слишком отличается от того, что вы делаете, вот макрос для ввода исходной команды с датой и именем пользователя - 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

Основываясь на комментарии, я дважды проверил ответ на фрагменты ниже, и, к сожалению, он не работает в представлении HTML. Другой способ сделать это - записать макрос:

  • В своем веб-проекте начните запись: CTRL + SHIFT + R
  • Введите <%= %> и верните каретку между пробелами после "=".
  • Остановить запись: CTRL + SHIFT + R
  • Вставьте макрос через CTRL + SHIFT + P

Этого мог будет достаточно, но было бы лучше, чтобы он был во всех проектах, плюс мы хотели бы более эффективное нажатие клавиш, чем CTRL + SHIFT + P:

  • Сохраните макрос: Инструменты-> Макросы-> Сохранить временный макрос, присвоив ему имя.
  • Свяжите его с комбинацией нажатия клавиш:
    • Инструменты-> Параметры и выберите узел Клавиатура.
    • Найдите выбранное вами имя
    • Введите комбинацию клавиш (например, ALT + A) и нажмите OK.

Теперь вы можете нажать сочетание клавиш (например, ALT + A) в представлении HTML, оно вставит <% =%> и поместит курсор в теги, готовые для ввода.


[Старый ответ: к сожалению, не работает в режиме просмотра HTML.]

Для фрагмента кода создайте файл фрагмента XML (например, «asp.snippet») с именем, ярлыком и расширением, затем используйте Инструменты -> Диспетчер фрагментов кода, чтобы добавить папку, в которой хранится фрагмент.

Вот XML-код для фрагмента, который (через "asp [tab] [tab]") расширяет "<% = [code]%>"

<?xml version = "1.0" encoding = "utf-8"?>
<CodeSnippet Format = "1.0.0"  xmlns = "http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
  <Header>
    <Title>ASP Server Tags</Title>
    <Author>Chris Bowen</Author>
    <Shortcut>asp</Shortcut>
    <Description>ASP.NET server escape characters, including equals</Description>
    <SnippetTypes>
      <SnippetType>SurroundsWith</SnippetType>
      <SnippetType>Expansion</SnippetType>
    </SnippetTypes>
  </Header>
  <Snippet>
    <Declarations>
      <Literal>
        <ID>code</ID>
        <Default>Code</Default>
      </Literal>
    </Declarations>
    <Code Language = "csharp">
      <![CDATA[<%= $code$ $selected$%>$end$]]>
    </Code>
  </Snippet>
</CodeSnippet>

Более подробная информация - здесь, в MSDN.

Кстати, у VS есть сниппет для создания сниппетов. Просто откройте новый файл XML, затем щелкните правой кнопкой мыши и выберите «Вставить сниппет» -> «Фрагмент».

Спасибо, Крис. Я обнаружил, что не могу установить его как фрагмент XML, если не изменил язык на «XML»? И даже после этого я не получаю никаких фрагментов, которые можно было бы показывать при редактировании страницы .ASPX? Предлагается, если я отредактирую файл XML. Но asp <tab> <tab> не вызывает его; хотя меню может.

Howard Pinsley 05.11.2008 04:49

Извини, Декер. Я обновил ответ с помощью подхода, основанного на макросах. Все еще довольно просто, и должно быть то, что вы ищете.

Chris Bowen - MSFT 05.11.2008 08:07
Ответ принят как подходящий

Эта функция макроса должна делать это:

Основной код будет делать одно из двух: если ничего не выбрано, он просто вставит конструкцию кода <% =%>, если у вас что-то выбрано в редакторе, он обернет этот код конструкцией 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

Спасибо, Брайан. Это тоже хорошо работает и имеет то преимущество, что работает с выделенным текстом.

Howard Pinsley 06.11.2008 00:41

Фрагменты кода в представлении HTML не работают. Он запланирован для следующей версии Visual Studio. Я бы сейчас рассмотрел подход с использованием макросов или посмотрел, позволяют ли другие инструменты создавать фрагменты в редакторе HTML.

Один хороший инструмент, который позволит вам это сделать, - Resharper. Вы можете создавать свои собственные шаблоны, которые будут делать то, что вам нужно, но также будут иметь окружение тегами. Есть целый ряд функций, и они того стоят за свою цену.

Другие вопросы по теме