Cómo definir un acceso directo (combinación de teclas) para insertar "<tag> </ tag>" en Emacs?

Quiero definir un acceso directo para introducir pares de etiquetas XML. Presionando la combinación de teclas key2key2 que debe solicitar la introducción de un nombre de etiqueta, .eg "foo", e insertar automáticamente " <foo></foo> ". ¿Como hacer eso?

Idealmente quisiera que el cursor se moviera automáticamente para ser después de la primera > .

Si utiliza YASnippet en modo xml, ya contiene un fragmento para la funcionalidad que solicita.

Introduzca la siguiente

 tag 

Pulse Tab y elija <tag>...</tag> para una etiqueta XML en línea o <tag>\n...\n</tag> para una etiqueta en su propia línea y lo que ingrese se convierta en

 <tag></tag> 

o

 <tag> </tag> 

respectivamente. Como lo que has introducido se convierte en el nombre de la etiqueta de apertura está marcado y puede introducir cualquier nombre de etiqueta que desee y se copiará a la etiqueta de cierre también. Cuando haya terminado de introducir el nombre de la etiqueta, pulse Tab y el cursor se colocará entre las etiquetas para poder introducir el contenido en la etiqueta. Cuando haya terminado de introducir el contenido en la etiqueta, pulse Tab nuevamente para colocar el cursor después de la etiqueta de cierre.

Tenga en cuenta que si desea personalizar el comportamiento de este fragmento es fácil. Utilice el menú de YASnippet para encontrar los fragmentos en cuestión y luego edítelos para que se adapten a sus necesidades.

Para obtener dichos fragmentos en cualquier otro modo, puede crearlos para ese modo haciendo lo siguiente:

  1. Agregue lo siguiente a su .emacs:

     (setq yas/root-directory "~/.emacs.d/mysnippets"); Develop and keep personal snippets under ~/emacs.d/mysnippets (yas/load-directory yas/root-directory); Load the snippets 

    Si prefiere mantener su fragmento en otro directorio, siga adelante y elija otro.

  2. Ingrese el modo en el que desea insertar los fragmentos.

  3. Haga Mx yas/new-snippet .
  4. Introduzca la tag.1l
  5. Ahora tendrá la oportunidad de editar el fragmento. Marca todo haciendo Cx h , luego matalo por Cw .
  6. Ahora tendrá un fragmento vacío. Pegue lo siguiente en él y asegúrese de que el fragmento finalice después de $0 y no en una nueva línea :

     #name: <tag>...</tag> #key: tag # -- <${1:tag}>$2</$1>$0 
  7. Haga Cc Cc para guardar y cargar el fragmento.

  8. Realice el paso 3 a 7, pero en su lugar utilice el nombre tag.2l y, en su lugar, pegue lo siguiente:

     #name: <tag> \n...\n</tag> #key: tag # -- <${1:tag}> $2 </$1>$0 

Tenga en cuenta que la clave yasnippet utiliza para la expansión, Tab , está enlazado a otra función en modo de reducción por defecto. Por lo tanto, o bien tiene que usar una corrección como http://calas.github.com/2009/11/20/using-yasnippets-in-markdown-mode.html o vincular yas/expand a una clave de su preferencia.

La siguiente animación muestra cómo funciona el primer fragmento:

Animación del fragmento <$ {1: tag}> $ 2 </ $ 1> $ 0

Es posible y debe ser fácil escribir eso.

Pero creo que lo que buscas es snippet / esqueletos. Por favor, salga yasnippet . Su básicamente un sistema de plantilla fácilmente extensible a sus necesidades