Como definir um atalho (combinação de teclas) para inserir “<tag> </ tag>” no Emacs?


3

Eu quero definir um atalho para inserir pares de tags XML. Pressionando a combinação de teclas key1 - key2 que deve solicitar a introdução de um nome de etiqueta, por exemplo, "foo" e insere automaticamente " <foo></foo> ". Como fazer isso?

Idealmente, eu gostaria que o cursor fosse movido automaticamente para depois do primeiro >.

Respostas:


2

Se você usar YASnippet no modo xml, ele já contém um trecho para a funcionalidade que você pede.

Digite o seguinte

tag

pressione Aba e escolha <tag>...</tag> para uma tag XML in-line ou <tag>\n...\n</tag> para uma tag em sua própria linha e o que você digitou se transforma

<tag></tag>

ou

<tag>

</tag>

respectivamente. Como o que você digitou se transforma em ou o nome da tag de abertura está marcado e você pode digitar o nome da tag que quiser e também será copiado para a tag de fechamento. Quando terminar de inserir o nome da tag, pressione Aba e o cursor é colocado entre as tags para que você possa inserir conteúdo na tag. Quando terminar de inserir o conteúdo na tag que você pressiona Aba novamente para posicionar o cursor após a tag de fechamento.

Observe que, se você quiser personalizar o comportamento desses snippets, será fácil. Use o menu YASnippet para encontrar os trechos em questão e, em seguida, edite-os para atender às suas necessidades.

Para obter os ditos fragmentos em qualquer outro modo, você pode criá-los para esse modo fazendo o seguinte:

  1. Adicione o seguinte ao seu .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
    

    Se você preferir manter seu trecho em outro diretório, vá em frente e escolha outro.

  2. Entre no modo em que você quer os trechos.

  3. Faz M x yas/new-snippet.
  4. Digite o nome tag.1l
  5. Agora você terá a chance de editar o snippet. Marque tudo fazendo Cxh , então mate-o por C-w .
  6. Agora você terá um snippet vazio. Cole o seguinte nele e certifique-se de que o snippet termine depois $0 e não em uma nova linha :

    #name: <tag>...</tag>
    #key: tag
    # --
    <${1:tag}>$2</$1>$0
    
  7. Faz C-c C-c para salvar e carregar o snippet.

  8. Siga os passos de 3 a 7, mas use o nome tag.2l e, em vez disso, cole o seguinte:

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

Note que o yasnippet chave usa para expansão, Aba , está ligado a outra função no modo markdown por padrão. Assim, você tem que usar uma correção como http://calas.github.com/2009/11/20/using-yasnippets-in-markdown-mode.html ou ligar yas/expand para uma chave de sua preferência.

A animação a seguir mostra como o primeiro snippet funciona:

Animation of the snippet <${1:tag}>$2</$1>$0


Seu truque sugerido funciona, exceto que toda vez que preciso entrar no modo xml primeiro. Como tornar isso mais fácil? Como definir um atalho para não precisar entrar manualmente no modo xml?
qazwsx

@duperuser Você pode não querer habilitar o snippet para todos os modos, mas apenas para alguns modos. Em que modos você deseja usá-lo? Talvez você precise de uma maneira mais eficaz de entrar no modo xml?
N.N.

Eu quero inserir rapidamente um par de <tag></tag> ao editar um arquivo de marcação em markdown-mode.
qazwsx

@duperuser Eu adicionei instruções de como usá-lo no modo markdown.
N.N.

1
@duperuser Se você quiser quatro espaços na tag.2l: 1) Entre no modo markdown, 2) M-x yas/find-snippets, 3) Escolha tag.2l, 4) Faça com que haja quatro espaços antes $24) C-c C-c para salvar e carregar o snippet.
N.N.

0

É possível e deve ser fácil escrever isso.

Mas eu acho que você está atrás de fragmentos / esqueletos. Por favor verifique yasnippet . É basicamente um sistema de templates facilmente extensível às suas necessidades


estou a usar yasnippet no LaTeX, deve ser muito útil para este caso também.
Dror
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.