¿Cómo envuelvo una selección con una etiqueta HTML en Visual Studio?

110

Esta parece la pregunta más básica del mundo, pero maldita sea si puedo encontrar una respuesta.

¿Existe un método abreviado de teclado, ya sea nativo de Visual Studio o mediante Code Rush u otro complemento de terceros, para envolver la selección actual con una etiqueta HTML? Estoy cansado de escribir la etiqueta de apertura, cortar la etiqueta de cierre perdida en el portapapeles, mover el cursor y pegarla al final donde pertenece.

Actualización: así es como TextMate maneja rodear una selección con una etiqueta . Francamente, me sorprende que Visual Studio no parezca tener una característica similar. Crear una macro o un fragmento para cada etiqueta imaginable que quiera usar parece absurdo.

dansays
fuente
Puede escribir la macro de tal manera que le solicite la etiqueta para envolver la selección. ¿Puedo sacar mi macro si quieres?
Ian Jacobs
¿Alguien ha encontrado una manera de hacer esto todavía?
SamWM

Respuestas:

132

Visual Studio 2015 viene con un nuevo atajo, Shift + Alt + W, que envuelve la selección actual con un div. Este atajo deja el texto "div" seleccionado, haciéndolo perfectamente modificable a cualquier etiqueta deseada. Esto, junto con el reemplazo automático de la etiqueta final, lo convierte en una solución rápida.

ACTUALIZAR

Este acceso directo también está disponible en Visual Studio 2017, pero debe tener instalada la carga de trabajo "ASP.NET y desarrollo web".

Ejemplo

Shift+Alt+W > p > Enter
D-Jones
fuente
Todavía aplicable en VS2017.
Zze
no funciona para mí en VS 2017. Creo que esto solo funciona si tienes web essentials.
RayLoveless
1
@RayLoveless ctrl-k ctrl-s me funciona para rodear con un fragmento. Sin embargo, su elección debe provenir de la lista de fragmentos (sin div), y los fragmentos proporcionan campos adicionales para editar que rompen el flujo de trabajo detallado anteriormente. Se podría argumentar a favor de los fragmentos personalizados, ¡pero yo prefiero soluciones listas para usar!
D-Jones
1
@WildJoe ¿qué tipo de archivo tienes abierto? si es un archivo xml o xaml por casualidad, no estoy seguro de que esto funcione, ya que creo que esto solo funciona para editores HTML.
D-Jones
1
@WildJoe vea aquí stackoverflow.com/a/34799783/1647159 y aquí stackoverflow.com/a/22274313/1647159 Advertencia, puede terminar con una experiencia degradada
D-Jones
65

Sé que esto es antiguo y probablemente ya haya encontrado la respuesta, pero me gustaría agregar, por el bien de aquellos que quizás no lo sepan, que esto es posible en VS 2010:

  1. Seleccione el código que le gustaría rodear.
  2. Haga ctrl-k ctrl-s(o haga clic con el botón derecho y seleccione Surround with....
  3. Hay una variedad de fragmentos de HTML para elegir.

Puede crear sus propios fragmentos de SurroundsWith si no encuentra lo que busca:

  1. Haga clic en Filey luego haga clic en Newy elija un tipo de archivo XML.
  2. En el Filemenú, haga clic en Save.
  3. En el Save ascuadro, seleccione All Files (*.*).
  4. En el File namecuadro, ingrese un nombre de archivo con la .snippetextensión del nombre de archivo.
  5. Haga clic en Save.

Ingrese algo como el siguiente ejemplo en el archivo XML:

<CodeSnippet Format="1.1.0" xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
  <Header>
    <Title>ul-div</Title>
    <Author>Microsoft Corporation</Author>
    <Shortcut>ul>li</Shortcut>
    <Description>Wrap in a ul and then an li</Description>
    <SnippetTypes>
      <SnippetType>Expansion</SnippetType>
      <SnippetType>SurroundsWith</SnippetType>
    </SnippetTypes>
  </Header>
  <Snippet>
    <Declarations>
      <Literal>
        <ID>selected</ID>
        <ToolTip>content</ToolTip>
        <Default>content</Default>
      </Literal>
    </Declarations>
    <Code Language="html"><![CDATA[<ul><li>$selected$</li></ul>$end$]]></Code>
  </Snippet>
</CodeSnippet>
  1. Abrir Tools> Code Snippets Manager.
  2. Haga clic Importy busque el fragmento que acaba de crear.
  3. Verifique My HTML Snippetsy haga clic Finishy luego OK.

¡Entonces tendrás disponible tu nuevo y brillante fragmento de HTML para envolver cosas!

Bradley Mountford
fuente
2
Cuando dice "Haga clic en Archivo XML y luego haga clic en Abrir". ¿Qué quieres decir? haga clic en qué archivo xml?
Usuario
¡Ese es un gran consejo! ¿Sabes lo contrario? ¿Cómo se pueden eliminar las etiquetas circundantes?
Trio Cheung
@User ... Lo estoy arreglando ahora. No debe decir "Haga clic en archivo XML ...", simplemente "Haga clic en archivo ...".
Watki02
3
esto funciona pero no es exactamente un atajo, más bien un atajo
Pixelomo
@AlanSutherland La primera vez que lo configuró, sí. Una vez que está configurado, es una simple cuestión de ctrl-k ctrl-s y seleccionar la plantilla.
Bradley Mountford
42

Si tiene Web Essentials instalado, puede usar Mayús + Alt + W para rodear una selección con una etiqueta.

zhech
fuente
6
Lo mejor para mencionar sobre esto es que solo necesita la etiqueta resaltada, o incluso tener el cursor dentro de la etiqueta. No es necesario seleccionar el texto explícitamente.
Alex KeySmith
8

Sé que este es un hilo antiguo, pero al encontrarme con el problema, finalmente pude hacer el mío y, como este es uno de los primeros resultados en Google, pensé que la gente podría encontrarlo útil.

En realidad, fue bastante fácil, simplemente copié de un fragmento de HTML existente y moví los literales. El siguiente fragmento estará rodeado por una etiqueta HTML genérica, solicita la etiqueta y la colocará tanto en las etiquetas de apertura como en las de cierre.

<CodeSnippet Format="1.1.0" xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
  <!-- Generic HTML Snippet -->
  <Header>
    <Title>Html</Title>
    <Author>Liam Slater</Author>
    <Shortcut>h</Shortcut>
    <Description>Markup snippet for HTML</Description>
    <SnippetTypes>
      <SnippetType>SurroundsWith</SnippetType>
    </SnippetTypes>
  </Header>
  <Snippet>
    <Declarations>
      <Literal>
        <ID>tag</ID>
        <ToolTip>tag</ToolTip>
        <Default></Default>
      </Literal>
      <Literal>
        <ID>selected</ID>
        <ToolTip>content</ToolTip>
        <Default>content</Default>
      </Literal>
    </Declarations>
    <Code Language="html"><![CDATA[<$tag$>$selected$</$tag$>$end$]]></Code>
  </Snippet>
</CodeSnippet>
Chao
fuente
7

Cuando me enfrento a esta situación, suelo escribir primero la etiqueta de cierre y luego la de apertura. Esto evita que el IDE "ayude" insertando la etiqueta de cierre donde no la quiero. Sin embargo, también estoy interesado en una mejor solución.

tvanfosson
fuente
3
+1. Realmente sorprendente lo complicado que es esto para una característica tan simple.
John Hargrove
Casi 8 años después sigo usando lo mismo
Jack
7

Para aquellos que usan Visual Studio 2017: haga clic con el botón derecho en un área html/ cshtml, o seleccione algunos elementos para ajustar, hay un Wrap With <div>botón en la lista. ingrese la descripción de la imagen aquí

Burak Karakuş
fuente
1
Este es un duplicado de la respuesta elegida actualmente (usando shift+alt+w).
Zze
¿Que debería hacer entonces? Por cierto, Visual Studio 2015 no tenía ese elemento de interfaz de usuario como mostré en mi respuesta cuando estaba escribiendo, solo quería mostrar que hay un elemento de interfaz de usuario para hacer lo mismo mediante clics del mouse en Visual Studio 2017.
Burak Karakuş
2

Nada de lo que tenga conocimiento, pero escribir una macro para envolverlo en cualquier etiqueta que desee no debería ser difícil. Tengo uno similar que envolverá mi selección en un bloque de región.

Ian Jacobs
fuente