HTML avec Vim

De Ensiwiki
Aller à : navigation, rechercher

Introduction

VIMHTML.PNG

Vim est de base très performant en HTML : il fait de l'intellisense et indente super bien. Il ne lui manque qu'une seule fonction utile : la fermeture automatique des tags lorsque l'on appuie sur "</". Vous trouverez sur Internet une fonction permettant de compléter les tags en appuyant sur \hc, mais devoir appuyer sur cette longue série de touche me semble un peu pénible. La fonction est également légèrement buggée. Voici une version tweekée et corrigée fermant automatiquement les tags lors de l'appui successif de < et /.

Code : fermeture automatique des tags

Ajoutez ces lignes à votre .vimrc :

function! InsertCloseTag()
  " inserts the appropriate closing HTML tag
  " may require ignorecase to be set, or to type HTML tags in exactly the same case
  if &filetype == 'html' || &filetype=='php' || &filetype=='xml'
  
    " list of tags which shouldn't be closed:
    let UnaryTags = ' Area Base Br br BR DD dd Dd DT dt Dt HR hr Hr Img img IMG input INPUT Input li Li LI link LINK Link meta Meta p P Param param PARAM '

    " remember current position:
    normal mz
    normal mw

    " loop backwards looking for tags:
    let Found = 0
	let NBL = 0
    while Found == 0
		 let NBL = NBL+1
		 if NBL == 50
			 break
		endif

      " find the previous <, then go forwards one character and grab the first
      " character plus the entire word:
      execute "normal ?\<LT>\<CR>l"
      normal "zyl
      let Tag = expand('<cword>')

      " if this is a closing tag, skip back to its matching opening tag:
      if @z == '/'
        execute "normal ?\<LT>" . Tag . "\<CR>"

      " if this is a unary tag, then position the cursor for the next
      " iteration:
      elseif match(UnaryTags, ' ' . Tag . ' ') > 0
        normal h

      " otherwise this is the tag that needs closing:
      else
        let Found = 1

      endif
    endwhile " not yet found match

    " create the closing tag and insert it:
    let @z = '</' . Tag . '>'
    normal `z"zp
	normal `w
	execute "normal />\<cr>"
  else " filetype is not HTML
	normal mw
    let @z = '</'
    normal "zp`wll
  endif " check on filetype
endfunction " InsertCloseTag()
imap <lt>/ <Esc>:call InsertCloseTag()<CR>a


Codes HTML automatiques

Pour remplacer les é par des &eacute; automatiquement, recopiez ces lignes dans un fichier HTML.vim placé dans $HOME/.vim/ftplugin/html/ :

imap á &aacute;
imap é &eacute;
imap í &iacute;
imap ó &oacute;
imap ú &uacute;
imap ü &uuml;
imap ñ &ntilde;
imap Á &Aacute;
imap É &Eacute;
imap Í &Iacute;
imap Ó &Oacute;
imap Ú &Uacute;
imap Ü &Uuml;
imap Ñ &Ntilde;
imap ¡ &iexcl;
imap ¿ &iquest;
imap << &laquo;
imap >> &raquo;
imap è &egrave;
imap à &agrave;

Fichiers de template

Si vous êtes amené à éditer des fichiers .tpl, qui sont en réalité de l'HTML, voici comment dire à Vim de considérer automatiquement ces types de fichier comme de l'HTML : ajoutez cette ligne à votre .vimrc :

au BufNewFile,BufRead *.tpl :set ft=html " all my .tpl files ARE html