About

Swaroop C H is 29 years of age. He is a coder and startupper. He has previously worked at Yahoo!, Adobe, his own startup and Infibeam.

Read more about him

Views
COLLECTION
Collection

Vim fr:Plugiciels

From Notes

Jump to: navigation, search

Contents

Introduction

Comme nous l'avons vu dans le chapitre précédent,nous pouvons écrire des scripts pour étendre les fonctionnalités actuelles de Vim pour faire plus de choses. Nous appelons ces scripts qui étendent ou ajoutent des fonctionnalités des "plugins."

Plusieurs types de plugins peuvent être écrits :

  • vimrc
  • global plugin
  • plugin pour les types de fichiers
  • plugin pour la coloration syntaxique
  • plugin pour le compilateur

Vous pouvez écrire vos propres plugins mais aussi télécharger et utiliser des plugins écrits par d'autres.

Personnalisation avec vimrc

Quand j'installe une nouvelle distribution Linux ou que je re-installe Windows, la première chose que je fais après avoir installé Vim est de récupérer mon dernier fichier vimrc à partir de mes backups, et ensuite je commence à utiliser Vim. Pourquoi est-ce important? Parce que le fichier vimrc contient différentes personnalisations/valeurs que j'aime et qui rendent Vim plus utile et agréable pour moi.

Deux fichiers vous permettent de personnaliser Vim à votre goût :

  1. vimrc - pour les personnalisations générales
  2. gvimrc - pour les personnalisations spécifiques au GUI

Leur emplacement est :

  • %HOME%/_vimrc et %HOME%/_gvimrc sous Windows
  • $HOME/.vimrc et $HOME/.gvimrc sous Linux/BSD/Mac OS X

Voyez :help vimrc pour l'emplacement exact sur votre système.

Ces fichiers vimrc et gvimrc peuvent contenir n'importe quelle commande Vim. La convention suivie dans ces fichiers est d'utiliser des paramètres simples dans les fichiers vimrc, et les choses compliquées sont sourcées à partir des plugins.

Par exemple, voici un extrait de mon fichier vimrc :

" My Vimrc file
" Maintainer: www.swaroopch.com/contact/
" Reference: Initially based on http://dev.gentoo.org/~ciaranm/docs/vim-guide/
" License: www.opensource.org/licenses/bsd-license.php

" Enable syntax highlighting.
syntax on

" Automatically indent when adding a curly bracket, etc.
set smartindent

" Tabs should be converted to a group of 4 spaces.
" This is the official Python convention
" (http://www.python.org/dev/peps/pep-0008/)
" I didn't find a good reason to not use it everywhere.
set shiftwidth=4
set tabstop=4
set expandtab
set smarttab

" Minimal number of screen lines to keep above and below the cursor.
set scrolloff=999

" Use UTF-8.
set encoding=utf-8

" Set color scheme that I like.
if has("gui_running")
    colorscheme desert
else
    colorscheme darkblue
endif

" Status line
set laststatus=2
set statusline=
set statusline+=%-3.3n\                      " buffer number
set statusline+=%f\                          " filename
set statusline+=%h%m%r%w                     " status flags
set statusline+=\[%{strlen(&ft)?&ft:'none'}] " file type
set statusline+=%=                           " right align remainder
set statusline+=0x%-8B                       " character value
set statusline+=%-14(%l,%c%V%)               " line, character
set statusline+=%<%P                         " file position

" Show line number, cursor position.
set ruler

" Display incomplete commands.
set showcmd

" To insert timestamp, press F3.
nmap <F3> a<C-R>=strftime("%Y-%m-%d %a %I:%M %p")<CR><Esc>
imap <F3> <C-R>=strftime("%Y-%m-%d %a %I:%M %p")<CR>

" To save, press ctrl-s.
nmap <c-s> :w<CR>
imap <c-s> <Esc>:w<CR>a

" Search as you type.
set incsearch

" Ignore case when searching.
set ignorecase

" Show autocomplete menus.
set wildmenu

" Show editing mode
set showmode

" Error bells are displayed visually.
set visualbell

Notez que ces commandes ne sont pas préfixées par un : . Le : est optionnel quand on écrit des scripts dans des fichiers parce qu'on suppose que ces commandes sont normales.

Si vous voulez apprendre les détails de chaque paramètrage mentionné ici, voyez :help.

Un extrait de mon fichier gvimrc :

" Size of GVim window
set lines=35 columns=99

" Don't display the menu or toolbar. Just the screen.
set guioptions-=m
set guioptions-=T

" Font. Very important.
if has('win32') || has('win64')
    " set guifont=Monaco:h16
    " http://jeffmilner.com/index.php/2005/07/30/windows-vista-fonts-now-available/
    set guifont=Consolas:h12:cANSI
elseif has('unix')
    let &guifont="Monospace 10"
endif

Il y a divers exemples de fichiers vimrc ici que je vous recommande afin d'en extraire les personnalisations qui vous conviendront pour votre propre fichier vimrc.

Voici quelques-uns des liens que j'ai trouvé :

Il est bien connu que le fichier vimrc d'une personne indique souvent depuis combien de temps cette personne utilise Vim.

Plugins Globaux

Les plugins globaux servent à fournir des fonctionnalités globales ou génériques.

Les plugins globaux peuvent être stockés dans deux endroits :

  1. $VIMRUNTIME/plugin/ pour les plugins standards fournis par Vim pendant son installation
  2. Pour installer vos propres plugins ou des plugins téléchargés n'importe où, vous pouvez utiliser votre répertoire pour les plugins :
    • $HOME/.vim/plugin/ sous Linux/BSD/Mac OS X
    • %HOME%/vimfiles/plugin/ sous Windows
    • Voyez :help runtimepath pour plus de détails sur les répertoires des plugins.

Voyez comment utiliser un plugin.

Un plugin utile est highlight_current_line.vim par Ansuman Mohanty qui fait exactement ce que le nom suggère. Téléchargez la dernière version de ce fichier highlight_current_line.vim et mettez-le dans votre répertoire pour plugin (comme indiqué au-dessus). Maintenant, redémarrez Vim et ouvrez un fichier. Notez comment la ligne courante est mise en évidence par opposition aux autres ligners du fichier.

Mais si cela ne vous plaît pas ? Détruisez juste le highlight_current_line.vim fichier et redémarrez Vim.

De la même manière , nous pouvons installer notre script related.vim ou capitalize.vim à partir du chapitre Scripter dans notre répertoire pour les plugins, et cela évite de lancer :source à chaque fois. Enfin, n'importe quel plugin que vous écrivez doit aller dans votre .vim/vimfiles répertoire de plugins.

Plugin pour les types de fichiers

Les plugins pour les types de fichiers sont écrits pour travailler sur certains types de fichiers. Par exemple, les programmes écrits en langage C ont leur propre style d'indentation, pliure, coloration syntaxique et même affichage des erreurs. Ces plugins sont uniquement pour certains types de fichiers.

Utilisation d'un plugin pour les types de fichiers

Essayons un plugin pour les fichiers XML. XML est un langage déclaratif qui utilise des tags pour décrire la structure du document lui-même. Par exemple, si vous avez un texte comme ce qui suit :

   Iron Gods
   ---------
   
   Ashok Banker's next book immediately following the Ramayana is said to
   be a novel tentatively titled "Iron Gods" scheduled to be published in
   2007. A contemporary novel, it is an epic hard science fiction story
   about a war between the gods of different faiths. Weary of the
   constant infighting between religious sects and their deities, God
   (aka Allah, Yahweh, brahman, or whatever one chooses to call the
   Supreme Deity) wishes to destroy creation altogether.
   
   A representation of prophets and holy warriors led by Ganesa, the
   elephant-headed Hindu deity, randomly picks a sample of mortals, five
   of whom are the main protagonists of the book--an American Catholic,
   an Indian Hindu, a Pakistani Muslim, a Japanese Buddhist, and a
   Japanese Shinto follower.  The mortal sampling, called a 'Palimpsest'
   is ferried aboard a vast Dyson's Sphere artifact termed The Jewel,
   which is built around the sun itself, contains retransplanted cities
   and landscapes brought from multiple parallel Earths and is the size
   of 12,000 Earths. It is also a spaceship travelling to the end of
   creation, where the Palimpsest is to present itself before God to
   plead clemency for all creation.
   
   Meanwhile, it is upto the five protagonists, aided by Ganesa and a few
   concerned individuals, including Lucifer Morningstar, Ali Abu Tarab,
   King David and his son Solomon, and others, to bring about peace among
   the myriad warring faiths.  The question is whether or not they can do
   so before the audience with God, and if they can do so peacefully--for
   pressure is mounting to wage one final War of Wars to end all war
   itself.
   
   (Excerpt taken from
   http://en.wikipedia.org/w/index.php?title=Ashok_Banker&oldid=86219280
   under the GNU Free Documentation License)

Il peut être écrit au format XML (plus précisément, au format 'DocBook XML' ) comme :

<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
        "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
<article>
 
    <articleinfo>
        <author><firstname>Wikipedia Contributors</firstname></author>
        <title>Iron Gods</title>
    </articleinfo>
 
    <para>
 
        Ashok Banker's next book immediately following the Ramayana is
        said to be a novel tentatively titled "Iron Gods" scheduled to
        be published in 2007. A contemporary novel, it is an epic hard
        science fiction story about a war between the gods of
        different faiths.  Weary of the constant infighting between
        religious sects and their deities, God (aka Allah, Yahweh,
        brahman, or whatever one chooses to call the Supreme Deity)
        wishes to destroy creation altogether.
 
    </para>
 
    <para>
 
        A representation of prophets and holy warriors led by Ganesa,
        the elephant-headed Hindu deity, randomly picks a sample of
        mortals, five of whom are the main protagonists of the
        book--an American Catholic, an Indian Hindu, a Pakistani
        Muslim, a Japanese Buddhist, and a Japanese Shinto follower.
        The mortal sampling, called a 'Palimpsest' is ferried aboard a
        vast Dyson's Sphere artifact termed The Jewel, which is built
        around the sun itself, contains retransplanted cities and
        landscapes brought from multiple parallel Earths and is the
        size of 12,000 Earths.  It is also a spaceship travelling to
        the end of creation, where the Palimpsest is to present itself
        before God to plead clemency for all creation.
 
    </para>
 
    <para>
 
        Meanwhile, it is upto the five protagonists, aided by Ganesa
        and a few concerned individuals, including Lucifer
        Morningstar, Ali Abu Tarab, King David and his son Solomon,
        and others, to bring about peace among the myriad warring
        faiths. The question is whether or not they can do so before
        the audience with God, and if they can do so peacefully--for
        pressure is mounting to wage one final War of Wars to end all
        war itself.
 
    </para>
 
    <sidebar>
        <para>
 
            (Excerpt taken from
            http://en.wikipedia.org/w/index.php?title=Ashok_Banker&amp;oldid=86219280
            under the GNU Free Documentation License)
 
        </para>
    </sidebar>
 
</article>

Notez comment la structure de ce document est plus explicite dans la version XML. Cela rend plus facile pour les outils la conversion du XML vers d'autres formats (comme PDF et des version pour l'impression). Le désavantage est que l'écriture en XML est plus difficile pour l'humain qui l'écrit. Voyons comment des ftplugins peuvent aider un utilisateur Vim qui écrit du XML.

1. D'abord, téléchargez le xmledit ftplugin et mettez-le dans votre ~/.vim/ftplugin/ répertoire.

2. Ajoutez la ligne suivante à votre fichier ~/.vimrc:

autocmd BufNewFile,BufRead *.xml source ~/.vim/ftplugin/xml.vim

(Vérifiez que vous indiquez le bon répertoire en fonction de votre système d'exploitation)

Cela valide le ftplugin xmledit chaque fois que vous ouvrez un fichier avec l'extension .xml.

3. Ouvrez Vim et éditez un fichier appelé test.xml.

4. Tapez <article.

5. Maintenant, tapez la terminaison >, et voyez comment le ftplugin xmledit ajoute le tag de fermeture automatiquement pour vous. Donc, votre document va ressembler à :

<article></article>

6. Maintenant, tapez un autre > et voyez comment le tag s'étend pour vous permettre de rentrer. d'autres tags. Le document doit maintenant ressembler à :

    <article>
 
    </article>

7. Vous noterez que le curseur est aussi indenté, ainsi vous pouvez écrire le document dans unne structure propre pour refléter la structure du document.

8. Répétez le processus jusqu'& l'écriture complète du document.

Notez comment un ftplugin spécial pour XML facilite l'écriture de documents XML. Voilà pourquoi les ftplugins sont conçus.

Ecrire un filetype plugin

Essayons d'écrire notre propre ftplugin.

Dans notre exemple précédent d'utilisation du ftplugin xmledit.vim et d'écriture au format XML, nous avon eu besoin d'écrire un en-tête standard au début de chaque fichier DocBook XML (qui est le format spécifique que nous avons utilisé). Pourquoi ne pas automatiser cela dans Vim grâce à l'utilisation d'un ftplugin?

Notre xml ftplugin a besoin d'ajouter l'information suivante en haut de notre 'nouveau' fichier XML :

<?xml version="1.0"?>
<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
          "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">

Donc, faisons en sorte que notre nouveau ftplugin, appelé 'xmlheader.vim' ne traite que les évènements 'BufNewFile'. Ajoutons ceci à notre ~/.vimrc:

autocmd BufNewFile *.xml source ~/.vim/ftplugin/xmlheader.vim

Maintenant, tout ce qu'il faut faire dans dans le xmlheader.vim est traiter les premières et deuxièmes lignes du fichier :

" Vim plugin to add XML header information to a new XML file
call setline(1, '<?xml version="1.0"?>')
call setline(2, '<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">')

Donc, maintenant redémarrer Vim, vérifier que le fichier 'test.xml' file n'existe pas déjà, et lancer :e test.xml. Vous verrez que le header est déjà rempli !

Syntax scheme

Nous venons d'écrire un fichier DocBook XML dans la précédente section. Cela nous aurait aidé si il y avait eu des codes de couleurs dans le fichier XML pour les tags Docbook valides afin d'être sûr de l'écrire correctement. En fait cela est possible en lançant :set filetype=docbkxml. Vim utilise alors le fichier de syntaxe situé à $VIMRUNTIME/syntax/docbkxml.vim.

Le fichier de syntaxe définit comment les rapports entre les différentes parties du fichier. Par exemple, le fichier de syntaxe pour XML définit quels tags sont présents et quelles couleurs donner aux tag names, etc.

Utiliser un syntax scheme

Voyons un fichier de syntaxe en action. Téléchargez le mkd.vim script qui est un fichier de syntaxe pour for la syntaxe Markdown. Markdown est essentiellement un format dans lequel du texte peut être écrit de telle sorte que ce format puisse être converti en HTML plus tard.

  1. Ouvrez un nouveau fichier dans Vim appelé 'test_markdown.txt'.
  2. Tapez :set syntax=mkd
  3. Saisissez le texte qui suit dans le fichier :
   # Bengaluru
   
   The name **Bangalore** is an anglicised version of the city's name in
   the Kannada language, Bengaluru.
   
   > A popular anecdote (although one contradicted by historical
   > evidence) recounts that the 11th-century Hoysala king Veera Ballala
   > II, while on a hunting expedition, lost his way in the forest. Tired
   > and hungry, he came across a poor old woman who served him boiled
   > beans. The grateful king named the place _"benda kaal-ooru"_
   > (literally, "town of boiled beans"), which was eventually
   > colloquialised to "Bengaluru".
   
   ***
   
   (This information has been retrieved from
   [Wikipedia](http://en.wikipedia.org/wiki/Bangalore) under the GNU Free
   Documentation License.)

4. Notez comment certaines parties du fichier comme l'en-tête et les mots soulignés sont automatiquement mis en évidence. Cela va rendre plus aisée l'écriture en syntaxe Markdown.

Ecrire un syntax scheme

Essayons d'écrire un fichier de syntaxe pour le AmiFormat format texte.

La coloration syntaxique tourne autour de deux étapes - la première consiste à définir le type de format de texte que nous recherchons et la deuxième est de décrire comment ce texte doit être affiché.

Par exemple, si nous voulons trouver toutes les occurences de <b>n'importe quel mot</b> et les afficher en gras. D'abord, il nous faut trouver ce motif dans notre texte, et ensuite lier le nom de ce motif au type d'affichage dont on a besoin :

:syntax match ourBold /&lt;b&gt;.*&lt;\/b&gt;/
:highlight default ourBold term=bold cterm=bold gui=bold

La première ligne indique que nous créons un nouveau type de syntaxe correspondant à un modèle, avec le nom 'ourBold' et l'expression régulière comme indiqué au-dessus.

La deuxième ligne indique que nous voulons mettre en évidence la syntaxe 'ourBold'. Le schéma spécifié est le schéma par défaut, ce qui signifie qu'il peut être remplacé par l'utilisateur ou d'autres schémas de couleurs. Nous pouvons indiquer trois façons différentes de représenter 'ourBold' pour les trois différents types d'affichage que Vim peut lancer - terminaux blancs et noirs, terminaux en couleurs et interface graphique avec GUI.

Parfois nous voulons indiquer une tâche dans notre texte comme un chose à faire et en général nous écrivons en majuscules 'TODO', mais si nous voulons le mettre plus en évidence ?

:syntax keyword ourTodo TODO FIXME XXX
:hi def link ourTodo Todo

D'abord, nous définissons que 'ourTodo' consiste en des mots-clés - des simples mots qui ont besoin d'être mis en évidence, et nous faisons un lien entre le groupe de motifs 'ourTodo' et un groupe existant déjà appelé 'Todo' dans Vim. Il y a des schémas de schémas de couleurs pré-définis. Le mieux est de lier nos styles de syntaxe aux groupes existants. Voyez :help group-name pour une liste des groupes disponibles.

Ensuite, nous avons des blocks de code spécifiques dans le groupe à l'intérieur de [code] .. [/code], donc comment mettons-nous cela en évidence ?

:syn region amiCode excludenl start=/\[code\]/ end=/\[\/code\]/
:hi def link amiCode Identifier

D'abord, nous définissons une zone de texte qui a un motif de début et un motif de fin (qui est très simple dans notre cas), et ensuite nous le lions à notre classe pré-existante 'Identifier'.

De la même manière, nous pouvons ajouter des définitions dans d'autres parties du texte comem défini dans AmiFormat reference, et le script final ressemble à :

" Vim syntax file for AmiFormat
" Language: AmiFormat
" Version: 1
" Last Change: 2006-12-28 Thu
" Maintainer: www.swaroopch.com/contact/
" License: www.opensource.org/licenses/bsd-license.php
" Reference: http://orangoo.com/labs/AmiNation/AmiFormat/

"""""""""" Initial Checks """"""""""""""""""""""""""""""""""""""""""""

" To be compatible with Vim 5.8. See `:help 44.12`
if version < 600
    syntax clear
elseif exists("b:current_syntax")
    " Quit when a (custom) syntax file was already loaded
    finish
endifriting

"""""""""" Patterns """"""""""""""""""""""""""""""""""""""""""""""""""

" Emphasis
syn match amiItalic /&lt;i&gt;.\{-}<\/i>/
syn match amiBold /&lt;b&gt;.\{-}<\/b>/

" Todo
syn keyword amiTodo TODO FIXME XXX

" Headings
syn match amiHeading /^h[1-6]\.\s\+.\{-}$/

" Lists
syn match amiList /^\s*\*\s\+/
syn match amiList /^\s*\d\+\.\s\+/

" Classes
syn match amiClass /^\s*%(\w\+).*%/
syn match amiClass /^\s*%{.*}.*%/

" Code
syn region amiCode excludenl start=/\[code\]/ end=/\[\/code\]/

" HTML
syn region amiEscape excludenl start=/\[escape\]/ end=/\[\/escape\]/

" Link
syn match amiLink /".\{-}":(.\{-})/
riting
" Image
syn match amiImage /!.\{-}(.\{-})!/

"""""""""" Highlighting """"""""""""""""""""""""""""""""""""""""""""""
 
hi def amiItalic term=italic cterm=italic gui=italic
hi def amiBold term=bold cterm=bold gui=bold
 
hi def link amiHeading Title
hi def link amiTodo Todo
hi def link amiList PreProc
hi def link amiClass Statement
hi def link amiCode Identifier
hi def link amiEscape Comment
hi def link amiLink String
hi def link amiImage String

"""""""""" Finish """"""""""""""""""""""""""""""""""""""""""""""""""""

" Set syntax name
let b:current_syntax = "amifmt"

Maintenant que le script marche, je l'ai téléchargé dans section des scripts Vim pendant que j'écrivais ce texte ! Maintenant n'importe qui peut utiliser la coloration syntaxique AmiFormat dans Vim.

Pour en savoir plus sur la coloration syntaxique dans Vim, consultez :

  • :help syntax
  • :help usr_44.txt
  • :help group-name
  • :help pattern-overview
  • :help mysyntaxfile
  • :help new-filetype
Note
Si vous voulez redessiner l'écran au cas où le fichier de syntaxe perturbe l'affichage, tapez CTRL-L.
Note
Vous avez déjà deviné que quand nous avons validé le filetype, Vim valide automatiquement la syntaxe du même nom également.

Plugin de Compilateur

Les plugins de compilateur sont utilisés pour compiler des programmes écrits dans différents langages. Cela est utile n'importe où quand une transformation est nécessaire à partir d'un langage source en texte plat vers un autre format, même si vous écrivez un fichier texte en Markdown et voulez convertir le texte en HTML avec un programme.

Etudions l'utilisation d'un plugin de compilateur pour Python.

1. Téléchargez le script compiler/python.vim et placez-le dans votre répertoire ~/.vim/compiler/.

2. Ajoutez la ligne suivante dans votre fichier ~/.vimrc:

autocmd BufNewFile,BufRead *.py compiler python

3. Redémarrez Vim et ouvrez un fichier Python, par exemple test.py et saisissez le programme suivant :

#!python
print 'Hello World'

4. Lancez :make et vous devriez voir la compilation réussie.

5. Introduisons volontairement une erreur dans le programme en remplaçant 'print' par 'pritn':

pritn 'Hello World'

Maintenant lancez :make et notez l'erreur affichée et que Vim positionne le curseur sur la ligne de l'erreur !

6. Tapez :clist pour voir le listing complet des erreurs.

7. Après avoir corrigé l'erreur, vous pouvez lancer :cnext pour aller à l'erreur suivante.

Si vous ouvrez le script compiler/python.vim que nous avons téléchargé, vous verrez qu'il est très simple - il y a seulement deux variables de définies - l'une est makeprg qui définit comment 'make' le fichier, c'est à dire comment le compiler et l'autre est errorformat qui définit la forme de l'erreur venant du compilateur.

J'ai écrit un compiler plugin pour Adobe Flex en utilisant les deux mêmes variables.

Voyez :help write-compiler-plugin et :help quickfix pour les détails sur la manière d'écrire votre propre compiler plugin.

Devoir : Ecrire un global plugin

Un exercice pour tester votre savoir-faire récent sur l'écriture de plugin :

Ecrire un plugin qui détruit les lignes en double et les lignes vides dans le document.

Vous pouvez utiliser soit le langage de script de Vim ou n'importe quel autre langage qui a un interface avec Vim.

Si vous cherchez de l'"inspiration", voyez cette astuce Vim.

Un autre ?

Ecrire un script qui recherche le sens et les mots en rapport avec le mot sur lequel est le curseur.

A nouveau, si vous avez besoin d'"inspiration", voyez mon plugin lookup.vim .

Désactiver des plugins

Supposez que vous trouvez que Vim fonctionne de manière bizarre et suspectez qu'un plugin en est la cause, alors vous pouvez permettre à Vim de faire une initialisation sélective en utilisant la commande -u.

Par exemple, vim -u NONE va démarrer Vim sans aucun script d'initialisation. C'est le Vim nu. Utilisez vim -u your-minimal-initialization.vim pour lancer seulement les initialisations spécifiques que vous voulez. Cette option est utile pour déterminer si les problèmes rencontrés dans Vim ont été apportés par un plugin.

Voyez :help -u et :help starting pour les détails.

Récapitulatif

Nous avons vu les différents types de plugins disponibles pour Vim, comment utiliser ces plugins et comment écrire des plugins. Nous savons maintenant combien Vim est extensible et comment écrire des plugins pour nous faciliter la vie.


Please add your comments by clicking on the 'Discussion' link in the left sidebar.