Comment peut-on fermer rapidement les balises HTML dans Vim?

Cela fait un moment que je n’ai pas eu à faire de code de type HTML dans Vim , mais je suis récemment tombé sur cela. Disons que j’écris du HTML simple:

 This is a title 

Comment puis-je écrire ces balises de fermeture pour le titre, la tête et le HTML rapidement? J’ai l’impression qu’il me manque une façon très simple de ne pas les écrire toutes une par une.

Bien sûr, je peux utiliser Ctrl P pour compléter automatiquement les noms de tag individuels, mais ce qui me place sur le clavier de mon ordinateur portable, ce sont les crochets et les barres obliques.

Regarde ça..

closetag.vim

 Functions and mappings to close open HTML/XML tags 

https://www.vim.org/scripts/script.php?script_id=13

J’utilise quelque chose de similaire.

Je trouve que l’utilisation du plugin xmledit est très utile. il ajoute deux fonctionnalités:

  1. Lorsque vous ouvrez une balise ( par exemple, tapez

    ), elle étend la balise dès que vous tapez la fermeture > dans

    et place le curseur dans la balise en mode insertion.

  2. Si vous tapez ensuite immédiatement un autre > ( par exemple, vous tapez

    >

    ), cela élargit cela en

et place le curseur dans la balise, en retrait une fois, en mode insertion.

Le plug-in xml vim ajoute le pliage de code et la balise nestede correspondant à ces fonctionnalités.

Bien sûr, vous n’avez pas à vous soucier de la fermeture des balises si vous écrivez votre contenu HTML dans Markdown et utilisez %! filtrer votre tampon Vim via le processeur Markdown de votre choix 🙂

J’aime les choses minimes,

 imap ,/  

Je trouve plus pratique de faire en sorte que vim écrive à la fois la balise d’ouverture et la balise de fermeture, au lieu de la balise de fermeture. Vous pouvez utiliser un excellent plugin Ragtag par Tim Pope. L’utilisation ressemble à ceci (laissez | marquer la position du curseur) vous tapez:

  span | 

appuyez sur CTRL + x ESPACE

et vous obtenez

   |  

Vous pouvez également utiliser CTRL + x ENTER au lieu de CTRL + x SPACE , et vous obtenez

  
 |
  

Ragtag peut faire plus que cela (par exemple, insérer <% = des choses autour de ce%> ou DOCTYPE). Vous voulez probablement vérifier les autres plugins par auteur de ragtag , en particulier surround .

Si vous faites quelque chose de complexe, l’ étincelle est très bonne.

Un exemple de leur site:

ul > li.item-$*3 développe pour:

 

avec un .

Pour faire l’exemple donné dans la question,

 html > head > title{This is a title} 

les rendements

   This is a title   

Il existe également un plug-in zencoding vim: https://github.com/mattn/zencoding-vim

tutoriel: https://github.com/mattn/zencoding-vim/blob/master/TUTORIAL


Mise à jour: cela s’appelle maintenant Emmet : http://emmet.io/


Un extrait du tutoriel:

 1. Expand Abbreviation Type abbreviation as 'div>p#foo$*3>a' and type ','. --------------------- 

--------------------- 2. Wrap with Abbreviation Write as below. --------------------- test1 test2 test3 --------------------- Then do visual select(line wize) and type '
,'. If you request 'Tag:', then type 'ul>li*'. ---------------------
  • test1
  • test2
  • test3
--------------------- ... 12. Make anchor from URL Move cursor to URL --------------------- http://www.google.com/ --------------------- Type '
a' --------------------- Google ---------------------

Cartographie

J’aime avoir mes balises de bloc (par opposition à inline) fermées immédiatement et avec un raccourci aussi simple que possible (j’aime éviter les touches spéciales comme CTRL dans la mesure du possible, bien que j’utilise closetag.vim pour fermer mes balises en ligne). aime utiliser ce raccourci lors du démarrage de blocs de balises (grâce à @kimilhee, il s’agit d’un sharepoint départ de sa réponse):

 inoremap > >Fo">O 

Utilisation de l’échantillon

Type-

 

[Tab]

Résultat-

 

|

| indique la position du curseur.

Explication

  • inoremap signifie créer le mappage en mode insertion
  • > signifie un angle de fermeture et un caractère de tabulation; c’est ce qui correspond
  • > signifie terminer le premier tag et s’échapper de l’insertion en mode normal
  • F< signifie trouver la dernière équerre d'ouverture
  • l signifie déplacer le curseur vers la droite (ne pas copier la cornière d’ouverture)
  • yt> signifie yank depuis la position du curseur jusqu'à avant le prochain angle de fermeture (c.-à-d. copier le contenu des tags)
  • o signifie commencer une nouvelle ligne en mode insertion et append une équerre d'ouverture et une barre oblique
  • " signifie coller en mode insertion à partir du registre par défaut ( " )
  • > signifie fermer la balise de fermeture et sortir du mode insertion
  • O signifie démarrer une nouvelle ligne en mode insertion au-dessus du curseur et insérer un espace

allml (maintenant Ragtag) et Omni-completion ( ) ne fonctionnent pas dans un fichier comme .py ou .java.

Si vous souhaitez fermer automatiquement la balise dans ces fichiers, vous pouvez mapper comme ceci.

 imap   F  $ a 

(^ R est Contrl + R: vous pouvez taper comme ceci Control + v puis Control + r)

(| est la position du curseur) maintenant si vous tapez ..

abcde

et tapez ^ j

alors il ferme le tag comme ça ..

abcde |

Départ vim-closetag

C’est un script très simple (également disponible sous forme de vundle in vundle ) qui ferme (X) les balises HTML pour vous. De c’est README :

S’il s’agit du contenu actuel:

  

Maintenant vous appuyez sur > , le contenu sera:

 |

Et maintenant, si vous appuyez à nouveau sur > , le contenu sera:

  | 

Note: | est le curseur ici

Voici encore une autre solution simple basée sur une écriture Web facilement trouvable:

  1. Fermeture automatique d’une balise HTML

    :iabbrev

  2. Mettre fin à l’achèvement

    autocmd FileType xml set omnifunc=xmlcomplete#CompleteTags

Grâce à l’excellente réponse de @KeithPinson (désolé, pas assez de points de réputation pour commenter votre réponse), cette alternative empêchera l’autocomplétion de copier tout élément supplémentaire pouvant se trouver dans la balise html (par exemple, classes, identifiants, etc. .) mais ne doit pas être copié sur la balise de fermeture.

MISE À JOUR J’ai mis à jour ma réponse pour travailler avec les fichiers filename.html.erb .
J’ai remarqué que ma réponse originale ne fonctionnait pas dans les fichiers couramment utilisés dans les vues Rails, comme some_file.html.erb lorsque j’utilisais un ruby ​​intégré (par exemple,

Year: <%= @year %>

). Le code ci dessous fonctionnera avec les fichiers .html.erb .

 inoremap > >?<[az]lyiwo">O 

Utilisation de l’échantillon

Type:

 
[Tab]

Résultat:

 
|

| indique la position du curseur

Et comme exemple d’ajout de la balise de fermeture en ligne au lieu du style de bloc:

 inoremap > >?<[az]lyiwh/[^%]>la">F 

Utilisation de l'échantillon

Type:

 
[Tab]

Résultat:

 
|

| indique la position du curseur

Il est vrai que les deux exemples ci-dessus reposent sur >[Tab] pour signaler une balise de fermeture (ce qui signifie que vous devez choisir le style en ligne ou en bloc). Personnellement, j'utilise le style bloc avec >[Tab] et le style en ligne avec >> .