asl@launay.org
L'éditeur ViM signifie « Vi iMproved » (Vi amélioré). Vi est l'éditeur le plus populaire et le plus puissant du monde Unix. Son nom vient de l'abbréviation éditeur Visuel. Un éditeur visuel comme Vi était un grand progrès par rapport aux éditeurs en ligne comme 'ed' (ou 'ex'). Les éditeurs 'ed' et 'ex' sont toujours disponibles sous Linux : voyez 'man ed' et 'man ex'.
Un bon éditeur augmentera la productivité du programmeur. Vim supporte la coloration syntaxique du code ainsi que différentes fontes, normales, grasses ou italiques. Les éditeurs couleurs comme ViM augmentent la productivité du programmeur de 2 à 3 fois ! Les programmeurs peuvent lire le code beaucoup plus rapidement si la syntaxe du code est colorées et mise en évidence.
Avant d'installer ViM, référez vous aux notes relevant de l'OS et aux informations sur la compilation et l'usage de ViM sur -
Si vous n'avez pas le paquetage ViM (RPM, DEB, tar, zip) alors chargez le code source par ftp sur le site officiel de ViM
Pour utiliser ViM, installez les paquetages rpm suivants sous RedHat -
rpm -i vim*.rpm Ou comme ceci - rpm -i vim-enhanced*.rpm rpm -i vim-X11*.rpm rpm -i vim-common*.rpm rpm -i vim-minimal*.rpm
rpm -qa | grep ^vim | xargs rpm -ql | less ou rpm -qa | grep ^vim | awk '{print "rpm -ql " $1 }' | /bin/sh | less
Et regardez la sortie en utilisant j, k, CTRL+f, CTRL+D, CTRL+B, CTRL+U ou les touches fléchées, page up/down. Voyez aussi 'man less'.
Notez que les paquetages RPM pour RedHat Linux utilisent une interface Motif. Si vous avez installé les librairies GTK sur votre système, vous pouvez envisager de recompiler ViM à partir du source code afin de bénéficier d'une interface graphique propre. Pour les informations sur la compilation du code de ViM, voyez « installer ViM sur Unix » plus bas.
Pour installer ViM sous Debian Linux (GNU Linux), identifiez vous en tant que superutilisateur et lorsque vous êtes connecté à Internet tapez -
apt-get install vim vim-rt
Pour les autres versions d'Unix comme Solaris, HPUX, AIX, Sinix, SCO, récupérez les fichiers sources (voyez avant )
zcat vim.tar.gz | tar -xvf - cd vim-5.6/src ./configure --enable-gui=motif make make install
Pour Windows 95/NT, récupérez les fichiers zip et installez-les en cliquant sur setup. Vous devez charger DEUX fichiers zip -
Récupérez ces deux fichiers (voir avant )
Décompactez les fichiers zip en utilisant Winzip http://www.winzip.com. Les deux fichiers zip (vim*rt.zip et vim*56.zip) doivent être décompressés dans le même répertoire, disons c:\vim.
Pour Windows 95/98, ajoutez la variable d'environnement VIM dans autoexec.bat en ajoutant cette ligne -
set VIM=c:\vim\vim56
Pour Windows NT, ajoutez la variable d'environnement dans le dialogue Control Panel | System | Environment | System Properties :
VIM=c:\vim\vim56
La variable VIM doit pointer là où vous avez installé le répertoire vim56. Vous pouvez aussi ajouter l'emplacement de gvim.exe à votre PATH.
Il est probable que vous deviez vous déconnecter et vous réidentifier pour avoir les bonnes variables. À l'invite MSDOS tapez -
set vim
Et vous devriez voir - VIM=c:\vim\vim56
Créez un raccourci sur votre bureau en copiant/collant de c:\vim\vim56\gvim.exe. Copiez le fichier gvimrc_example vers $VIM\_gvimrc. Dans mon cas, il s'agit de c:\vim\vim56\_gvimrc.
Vous aurez besoin des archives Unix et extra pour construire vim.exe pour VMS. Pour utiliser toute la puissance de ViM vous aurez également besoin des fichiers runtime. Prenez ces fichiers (voir avant ).
Vous pouvez charger des exécutables précompilés sur http://www.polarfox.com/vim.
Les auteurs de ViM VMS sont -
Décompactez les archives Unix et Extra dans un même répertoire. Dans le sous-répertoire <.SRC> vous devriez trouver le fichier make OS_VMS.MMS. En éditant ce fichier vous pourrez choisir les versions des caractères, des interfaces et du débogage. Il y a également des options additionnelles concernant les supports pour Perl, Python et Tcl.
Vous aurez besoin soit de l'utilitaire DECSET mms ou du clone disponible gratuitement appellé mmk (VMS n'a pas d'utilitaire make en distribution standard). Vous pouvez récupérer mmk sur http://www.openvms.digital.com/freeware/MMK/
Si vous avez MMS sur votre système, la commande
> mms /descrip=os_vms.mms
construira votre version personnalisée de ViM. La commande équivalente pour mmk est :
> mmk /descrip=os_vms.mms
ViM utilise une structure de répertoires spéciale pour les fichiers de documentation et d'utilisation :
vim (ou autre) |- tmp |- vim55 |----- doc |----- syntax |- vim56 |----- doc |----- syntax vimrc (fichiers système rc) gvimrc
Utilisez :
> define/nolog device:[leading-path-here.vim] vim > define/nolog device:[leading-path-here.vim.vim56] vimruntime > define/nolog device:[leading-path-here.tmp] tmp
Note : les variables $VIMRUNTIME et $TMP sont optionnelles. Lisez en plus sur :help runtime.
Habituellement vous devrez faire tourner une seule version de ViM sur votre système, il est donc suffisant de dédier un seul répertoire à ViM. Copiez toute la structure des répertoires de runtime dans la position de déploiement. Ajoutez les lignes suivantes à votre LOGIN.COM (dans le répertoire SYS$LOGIN). Définissez la variable $VIM en tant que :
> $ define VIM device: <path>
Configurez quelques symboles :
> $ ! vi lance ViM en mode caractère > $ vi*m :== mcr device:<path>VIM.EXE > $ !gvi lance ViM en mode GUI > $ gv*im :== spawn/nowait mcr device:<path>VIM.EXE -g
Créez les fichiers .vimrc et .gvimrc dans votre répertoire personnel (SYS$LOGIN).
La méthode la plus simple est de renommer les fichiers d'exemples. Vous pouvez laisser le fichier de menu (MENU.VIM) et les fichiers vimrc et gvimrc dans le répertoire original $VIM. Ce sera la configuration par défaut pour tous les utilisateurs, mais ceux-ci pourront apporter leurs propres modifications à la configuration via les fichiers .vimrc et .gvimrc de leur répertoire personnel. Ceci devrait marcher sans problème.
Note : Rappellez-vous, les fichiers systèmes rc (défaut pour tous les utilisateurs) n'ont pas de « . » final. Ainsi, les fichiers systèmes rc sont :
> VIM$:vimrc > VIM$:gvimrc > VIM$:menu.vim
> sys$login:.vimrc > sys$login:.gvimrc
Vous pouvez vérifier que tout fonctionne et est à la bonne place avec la commande :version.
Exemple de LOGIN.COM : > $ define/nolog VIM RF10:[UTIL.VIM] > $ vi*m :== mcr VIM:VIM.EXE > $ gv*im :== spawn/nowait mcr VIM:VIM.EXE -g > $ set disp/create/node=192.168.5.223/trans=tcpip
Note : Cette configuration devrait être suffisante si vous travaillez sur un serveur seul ou dans un environnement clusterisé, mais si vous désirez utiliser ViM en tant qu'éditeur internoeuds, il suffit de définir le « chemin » complet :
> $ define VIM "<server_name>[""user password""]::device:<path>" > $ vi*m :== "mcr VIM:VIM.EXE"
par exemple :
> $ define VIM "PLUTO::RF10:[UTIL.VIM]" > $ define VIM "PLUTO""ZAY mypass""::RF10:[UTIL.VIM]" ! si un pass est nécessaire
VMS n'est pas un environnement X window natif, vous ne pouvez donc pas lancer ViM en mode GUI « juste comme ça ». Mais ce n'est pas trop compliqué d'obtenir un ViM fonctionnel.
1) Si vous travaillez sur la console X VMS. Lancez ViM avec la commande : > $ mc device:<path>VIM.EXE -g ou tapez :gui en commande à l'invite ViM. Pour plus d'infos tapez :help gui 2) Si vous travaillez sur un autre environnement X window comme Unix ou une console VMS X distante. Configurez votre affichage sur cet hôte avec : > $ set disp/create/node=<addresse IP>/trans=<nom-transport> et lancez ViM comme au point 1. Vous pourrez trouver plus d'aide dans la documentation VMS ou tapez: help set disp à l'invite VMS. Exemples : > $ set disp/create/node=192.168.5.159 ! transport par défaut DECNet > $ set disp/create/node=192.168.5.159/trans=tcpip ! réseau TCP/IP > $ set disp/create/node=192.168.5.159/trans=local ! affichage sur le même noeud
Note : Vous ne devez en définir qu'un. Pour plus d'infos tapez $help set disp à l'invite VMS.
Lisez les notes de version de ViM sur OS/2, voyez avant .
Pour le moment il n'y a pas de version PM native de la version GUI de ViM ; la version OS/2 est une application en console. Néanmoins, il y a maintenant une version Win32s-compatible GUI, qui devrait être utilisable par les utilisateurs de Warp4 (qui supporte Win32s) dans une session Win-OS/2. Les notes de ce fichier se réfèrent à la version console native.
Pour utiliser ViM, vous aurez besoin de l'environnement de lancement emx (au moins la version 0.9b). Elle est généralement disponible en tant que (demandez le à Archie) :
emxrt.zip emx runtime package
Lisez les notes de version de ViM sur Mac, voyez avant .
L'auteur de ViM sur Mac (de l'ancienne version 3.0) est
Eric Fischer 5759 N. Guilford Ave Indianapolis IN 46220 USA
Rapport de Bogue Mac. Lorsque vous avez à rapporter tout changement spécifique au Mac, bogue ou option, incluez l'adresse suivante dans le champ « To: » ou « Copy To: ». dany.stamant@sympatico.ca
ViM compile sans ajout avec le projet CodeWarrior en utilisant CodeWarrior 9. Si vous utilisez une version plus récente (CW Pro) vous devrez convertir le projet avant toute chose. Pour compiler ViM pour Macs 68k vous devrez ouvrir la ressource « size » dans ResEdit et activer le bouton « High level events aware » pour avoir un copier/coller fonctionnel. Vous devrez augmenter la partition de mémoire à au moins 1024 koctets pour éviter à ViM de se crasher faute de mémoire suffisante.
Pour permettre la coloration syntaxique, vous DEVEZ copier le fichier vimrc dans votre répertoire personnel. Il ajoutera également le menu « Syntax » pour la commande gvim. Vous pouvez cliquer sur le menu Syntax et sélectionner le langage approprié, comme C++, Perl, Java, SQL, ESQL, etc.
cd $HOME cp /usr/doc/vim-common-5.7/gvimrc_example ~/.gvimrc cp /usr/doc/vim-common-5.7/vimrc_example ~/.vimrc
set guifont=8x13bold "set guifont=9x15bold "set guifont=7x14bold "set guifont=7x13bold
set tabstop=4 set shiftwidth=4 set nowrapscan set ignorecase
Pour voir la liste des fontes disponibles sous Linux/Unix voyez la commande xlsfonts. Tapez -
bash$ xlsfonts | less bash$ xlsfonts | grep -i bold | grep x bash$ man xlsfonts
Vous pouvez configurer quelques-unes des propriétés de Vim dans le fichier Xdefaults.
ATTENTION : Ne mettez pas Vim*geometry, il coincerait les menu gvim, utilisez plutôt Vim.geometry à la place.
Éditez votre $HOME/.Xdefaults et ajoutez les lignes suivantes :
! GVim super couleurs. Vim*useSchemes: all Vim*sgiMode: true Vim*useEnhancedFSB: true Vim.foreground: Black !Vim.background: lightyellow2 Vim*background: white ! N'utilisez PAS Vim*geometry, il coincerait les menu gvim, ! utilisez Vim.geometry. Un astérisque entre Vim et geometry n'est pas autorisé. ! Vim.geometry: widthxheight Vim.geometry: 88x40 !Vim*font: -misc-fixed-medium-r-normal--20-200-75-75-c-100-iso8859-15-*5 Vim*menuBackground: yellow Vim*menuForeground: black
xrdb -merge $HOME/.Xdefaults man xrdb
Vous pouvez aussi éditer votre fichier /.gvimrc pour changer les couleurs de fond :
gvim $HOME/.gvimrc Les meilleures couleurs de fond sont jaune clair ou blanc. highlight Normal guibg=lightyellow
Vous pouvez changer des paramètres comme la couleur, les fontes grasses ou normales dans le fichier gvimrc. Il est extrêmement recommandé de configurer la couleur de fond au jaune clair ou blanc. Les ergonomistes disent que la meilleure couleur de fond est le jaune clair ou le blanc. Vous pouvez changer la variable « guibg » comme suit :
highlight Normal guibg=lightyellow
Le fichier d'exemple de vim-5.5/runtime/vimrc_example est celui-ci :
" Un exemple de fichier vimrc.
"
" Mainteneur : Bram Moolenaar <Bram@vim.org>
" Dernières modifications : 9 Sep 1999
"
" Pour l'utiliser, copiez le dans
" pour Unix et OS/2 : ~/.vimrc
" pour Amiga : s:.vimrc
" pour MS-DOS and Win32 : $VIM\_vimrc
set nocompatible " Utilise les défauts Vim (bien mieux !)
set bs=2 " autorise l'effacement de tout en mode insertion
set ai " toujours utiliser l'autoindentation
set backup " Conserver un fichier de sauvegarde
set viminfo='20,\"50 " Lit/écrit un fichier .viminfo, ne sauve pas plus
" de 50 lignes de registres
set history=50 " Conserve 50 lignes d'historique des commandes
set ruler " Montre toujours la position du curseur
" Pour l'interface Win32: retirez l'option 't' de 'guioptions': pas d'entrée menu tearoff
" let &guioptions = substitute(&guioptions, "t", "", "g")
" N'utilise pas le mode Ex, utilise Q pour le formatage
map Q gq
" p en mode Visuel remplace le texte sélectionné par le registre "".
vnoremap p <Esc>:let current_reg = @"<CR>gvdi<C-R>=current_reg<CR><Esc>
" Active la coloration syntaxique lorsque le terminal dispose de couleurs
" Active aussi la coloration de la dernière chaîne recherchée.
if &t_Co > 2 || has("gui_running")
syntax on
set hlsearch
endif
" Ne lance la partie suivante que si le support des autocommandes a été inclus
" lors de la compilation
if has("autocmd")
" Dans les fichiers textes, toujours limiter la longueur du texte à 78
" caractères
autocmd BufRead *.txt set tw=78
augroup cprog
" Supprime toutes les autocommandes cprog
au!
" Lors du début d'édition d'un fichier :
" Pour les fichiers C et C++ active le formatage des
" commentaires et l'indentation C
" Pour les autres fichiers, les désactive.
" Ne pas changer l'ordre, il est important que la ligne
" avec * arrive avant.
autocmd FileType * set formatoptions=tcql nocindent comments&
autocmd FileType c,cpp set formatoptions=croql cindent comments=sr:/*,mb:*,el:*/,://
augroup END
augroup gzip
" Supprime toutes les autocommandes gzip
au!
" Active l'édition des fichiers gzippés
" Active le mode binaire avant de lire le fichier
autocmd BufReadPre,FileReadPre *.gz,*.bz2 set bin
autocmd BufReadPost,FileReadPost *.gz call GZIP_read("gunzip")
autocmd BufReadPost,FileReadPost *.bz2 call GZIP_read("bunzip2")
autocmd BufWritePost,FileWritePost *.gz call GZIP_write("gzip")
autocmd BufWritePost,FileWritePost *.bz2 call GZIP_write("bzip2")
autocmd FileAppendPre *.gz call GZIP_appre("gunzip")
autocmd FileAppendPre *.bz2 call GZIP_appre("bunzip2")
autocmd FileAppendPost *.gz call GZIP_write("gzip")
autocmd FileAppendPost *.bz2 call GZIP_write("bzip2")
" Après la lecture du fichier compressé : décompresse le texte dans le
" buffer avec "cmd"
fun! GZIP_read(cmd)
let ch_save = &ch
set ch=2
execute "'[,']!" . a:cmd
set nobin
let &ch = ch_save
execute ":doautocmd BufReadPost " . expand("%:r")
endfun
" Après l'écriture du fichier compressé : compresse le fichier écrit avec "cmd"
fun! GZIP_write(cmd)
if rename(expand("<afile>"), expand("<afile>:r")) == 0
execute "!" . a:cmd . " <afile>:r"
endif
endfun
" Avant l'ajout au fichier compressé : décompresser le fichier avec "cmd"
fun! GZIP_appre(cmd)
execute "!" . a:cmd . " <afile>"
call rename(expand("<afile>:r"), expand("<afile>"))
endfun
augroup END
" Ce qui suit est désactivé, car il change la liste de sauts. On ne peut pas utiliser
" CTRL-O pour revenir en arrière dans les fichiers précédents plus d'une fois.
if 0
" Lors de l'édition d'un fichier, saute toujours à la dernière position du curseur.
" Ceci doit se trouver après les commandes de décompression.
autocmd BufReadPost * if line("'\"") && line("'\"") <= line("$") | exe "normal `\"" | endif
endif
endif " has("autocmd")
L'exemple de gvimrc de vim-5.5/runtime/gvimrc_example ressemble à celui-ci :
" Un exemple de fichier gvimrc. " Ces commandes sont exécutées lors du lancement de l'interface graphique. " " Mainteneur : Bram Moolenaar <Bram@vim.org> " Dernières modifications : 2 Fév 1999 " " Pour l'utiliser, copiez le dans " pour Unix et OS/2 : ~/.gvimrc " pour Amiga : s:.gvimrc " pour MS-DOS and Win32 : $VIM\_gvimrc " Passe les commandes externes par un tuyau au lieu d'un pseudo-tty "set noguipty " Active la fonte X11 à utiliser " set guifont=-misc-fixed-medium-r-normal--14-130-75-75-c-70-iso8859-1 " Rend la ligne de commande de 2 lignes plus grande set ch=2 " Permet le shift-insert fonctionnel comme dans les Xterm map <S-Insert> <MiddleMouse> map! <S-Insert> <MiddleMouse> " Ne fait ceci que pour Vim de version 5.0 et ultérieures. if version >= 500 " J'aime avoir des chaînes éclairées dans les commentaires C let c_comment_strings=1 " Active la coloration syntaxique. syntax on " Active la coloration de la chaîne recherchée. set hlsearch " Pour la version Win32, on a "K" qui cherche le keyword dans un fichier d'aide "if has("win32") " let winhelpfile='windows.hlp' " map K :execute "!start winhlp32 -k <cword> " . winhelpfile <CR> "endif " Cache le pointeur de souris lorsque l'on tape set mousehide " Utilise des couleurs sympathiques " Le fond pour le texte normal est en gris clair " Le texte sous la dernière ligne est en gris sombre " Le curseur est gris " Les constantes ne sont pas soulignées mais ont un fond légèrement plus clair highlight Normal guibg=grey90 highlight Cursor guibg=Green guifg=NONE highlight NonText guibg=grey80 highlight Constant gui=NONE guibg=grey95 highlight Special gui=NONE guibg=grey95 endif
La section ci-dessous provient d'une session gvim en tapant « :help syntax » -
bash$ gvim un_test :help syntax
Si un type de fichier que vous désirez utiliser n'est pas encore détecté, il y a deux moyens pour l'ajouter. Il vaut mieux ne pas modifier le fichier $VIMRUNTIME/filetype.vim. Il sera réécrit lors de l'installation d'une nouvelle version de ViM. Crééz un fichier dans $HOME/vim/myfiletypes.vim et ajoutez lui ces lignes -
" Nom du fichier : $HOME/vim/mestypesdefichiers.vim " mestypesdefichiers augroup filetype au! BufRead,BufNewFile *.mine set filetype=mine au! BufRead,BufNewFile *.xyz set filetype=drawing au! BufRead,BufNewFile *.prc set filetype=plsql augroup END
Ajoutez ensuite une ligne à vos fichiers $HOME/.vimrc et $HOME/.gvimrc pour initialiser la variable « mestypesdefichiers » au nom de ce fichier. (ATTENTION : Vous DEVEZ mettre ceci dans les deux fichiers vimrc et gvimrc pour que ceci fonctionne. Exemple :
<code> let myfiletypefile = "~/vim/myfiletypes.vim"
NOTE : Assurez vous que vous initialisez bien « mestypesdefichiers » avant de passer à la détection du type de fichier. Ceci doit intervenir avant toute commande « :filetype on » ou « :syntax on ».
Votre fichier sera alors parcouru après l'intallation des autocommandes de type de fichier par défaut. Ceci vous permet de passer outre tous les paramètres par défaut, en utilisant « :au! » pour supprimer les autocommandes de type de fichier existant pour le même schéma. Seule l'autocommande pour parcourir le fichier scripts.vim est donné plus tard. Ceci vous permettra de vous assurer que les autocommandes dans « mestypesdefichiers » sont utilisées avant de vérifier le contenu du fichier.
Au lieu d'utiliser un menu « Syntax » vous pouvez lire manuellement le fichier de syntaxe. Éditez le fichier avec gvim et donnez la commande « so » à : (en mode d'échappement). Par exemple :
gvim foo.pc :so $VIM/syntax/esqlc.vim
Chaque fichier de syntaxe supporte une ou plusieurs extensions de fichiers par défaut, par exemple, le fichier de syntaxe JavaScript supporte l'extension *.js. Si vous utilisez une extension qui crée un conflit avec un autre fichier de syntaxe par défaut (comme ajouter du JavaScript à un fichier *.html) vous pourrez alors charger le fichier de syntaxe additionnel avec la commande :so $VIM/syntax/javascript.vim. Pour éviter d'avoir à le taper, vous pouvez créer un lien symbolique par :
ln -s $VIM/syntax/javascript.vim js gvim foo.html (... this file contains javascript functions and HTML) :so js
Vous pouvez utiliser ViM sous deux modes, l'un avec interface graphique et l'autre sans. Pour utiliser l'interface graphique utilisez la commande :
gvim foo.cpp
vim foo.cpp ou le mode ancien vi foo.cpp
Il est très recommandé que vous utilisiez toujours gvim à la place de vim, car le mode GUI avec les couleurs augmentera réellement votre productivité.
Le mode GUI gvim permet ce qui suit :
En général ViM est utilisé en conjonction avec d'autres outils puissants comme ctags et gdb. ctags est très rapide pour la navigation au milieu de millions de lignes de code « C/C++ » et gdb est pour le déboguage de code « C/C++ ». Une brève introduction à ces deux commandes indispensables sera donnée dans ce chapitre.
ctags est la commande la plus puissante pour coder en C, C++, Java, Perl, scripts shell Korn/Bourne ou Fortran. Les développeurs utilisent intensivement ctags pour naviguer au travers de milliers de fonctions à l'intérieur de programmes C/C++. Voyez `man ctags' sous Unix. Il est très important que vous appreniez comment utiliser ctags pour développer des programmes en C, C++, Java, etc. La navigation est la tâche simple la plus importante lors de développement en C ou C++. L'utilisation de ctags peut vous aider à rapidement lire le code en sautant de la ligne d'appel à la fonction appellée, en s'enfonçant dans les appels de fonctions imbriquées, et en remontant de la fonction la plus imbriquée jusqu'à la fonction principale. Vous pouvez aller et revenir de fonction en fonction très rapidement.
Sans NAVIGATION vous serez complètement perdu ! ctags est comme le COMPAS magnétique nécessaire aux programmeurs.
Utilisation de ctags :
ctags *.cpp gvim -t foo_function gvim -t main
À l'intérieur de l'éditeur ViM, vous pouvez sauter à une fonction en tapant : (double point) tag nom_de_la_fonction comme ci dessous :
:tag fonction_exemple
Si vous voulez sauter dans la fonction à partir de la ligne du fichier contenant le nom de la fonction, placez le curseur juste avant le nom de la fonction et tapez CTRL+] (tapez la touche de contrôle et le crochet gauche simultanément).
// code d'exemple switch(id_number) { Case 1: if ( foo_function( 22, "abcef") == 3 ) ^ | | | Placez le curseur ici (juste avant foo_function) et tapez CTRL+] Ceci vous emmènera à la fonction nommée "foo_function". Pour revenir à cette ligne tapez CTRL+t
Puisque ctags ne supporte pas directement le langage Embedded SQL/C (ESQL), le script shell suivant peut être utilisé pour créer les marques pour esql. ESQL/C est un ensemble de commandes SQL de base de donnée à l'intérieur de programmes « C ». Le ESQL/C d'Oracle est appellé Pro*C et Sybase, Informix ont ESQL/C et PostgreSQL a produit « ecpg ».
Sauvez ce fichier sous « sqltags.sh » et tapez chmod a+rx tags_gen.sh.
#!/bin/sh # Programme pour créer les ctags pour les fichiers ESQL, C++ et C ESQL_EXTN=pc tag_file1=tags_file.1 tag_file2=tags_file.2 which_tag=ctags rm -f $tag_file1 $tag_file2 tags aa=`ls *.$ESQL_EXTN` #echo $aa for ii in $aa do #echo $ii jj=`echo $ii | cut -d'.' -f1` #echo $jj if [ ! -f $jj.cpp ]; then echo " " echo " " echo "*******************************************************" echo "Les fichiers ESQL *.cpp files n'existent pas..." echo "Vous devez générer les fichiers *.cpp à partir des *.pc" echo "en utilisant le pré-compilateur Oracle Pro*C ou Sybase" echo "ou le pré-compilateur Informix esql/c." echo "Puis relancez cette commande" echo "*******************************************************" echo " " exit fi rm -f tags $which_tag $jj.cpp kk=s/$jj\.cpp/$jj\.pc/g #echo $kk > sed.tmp #sed -f sed.tmp tags >> $tag_file1 #sed -e's/sample\.cpp/sample\.pc/g' tags >> $tag_file1 sed -e $kk tags >> $tag_file1 done # S'occupe des fichiers C++/C - exclut les fichiers ESQL *.cpp rm -f tags $tag_file2 bb=`ls *.cpp *.c` aa=`ls *.$ESQL_EXTN` for mm in $bb do ee=`echo $mm | cut -d'.' -f1` file_type="NOT_ESQL" # Exclut les fichiers ESQL *.cpp et *.c for nn in $aa do dd=`echo $nn | cut -d'.' -f1` if [ "$dd" = "$ee" ]; then file_type="ESQL" break fi done if [ "$file_type" = "ESQL" ]; then continue fi rm -f tags $which_tag $mm cat tags >> $tag_file2 done mv -f $tag_file2 tags cat $tag_file1 >> tags rm -f $tag_file1 # Doit sortir le fichier des marqueurs pour fonctionner correctement... sort tags > $tag_file1 mv $tag_file1 tags
Le script shell donné ci-dessous peut être utilisé pour générer les marques pour une très large variété de programmes écrits en JavaScript, les scripts PHP/FI, Korn, C, Bourne et beaucoup d'autres. C'est un module très générique.
Sauvez ce fichier sous tags_gen.sh et tapez chmod a+rx tags_gen.sh.
#!/bin/sh tmp_tag=tags_file tmp_tag2=tags_file2 echo " " echo " " echo " " echo " " echo " " echo "Génère les marqueurs pour..." while : do echo "Entrer l'extension du fichier pour lequel vous voulez générer des marqueurs." echo -n "Les extensions de fichiers peuvent être sh, js, ksh, etc... : " read ans if [ "$ans" == "" ]; then echo " " echo "Mauvaise entrée. Essayez encore !" else break fi done rm -f $tmp_tag aa=`ls *.$ans` for ii in $aa do jj=`echo $ii | cut -d'.' -f1` #echo $jj cp $ii $jj.c ctags $jj.c echo "s/$jj.c/$ii/g" > $tmp_tag2 sed -f $tmp_tag2 tags >> $tmp_tag \rm -f tags $jj.c done sort $tmp_tag > tags rm -f $tmp_tag $tmp_tag2
Vous utiliserez gdb extensivement avec Vi. Le déboguage est l'un des plus importants aspects de la programmation en tant que coût majeur du développement et des tests des projets.
Pour déboguer des programmes C/C++ vous utiliserez l'outil « gdb ». Voyez 'man gdb'. Vous devrez compiler vos programmes avec l'option -g3 comme
gcc -g3 foo.c foo_another.c sample.c
Pour configurer des alias utiles :
Configurez l'alias dans votre ~/.bash_profile
alias gdb='gdb -directory=/home/src -directory=/usr/monnom/src '
Donnera -
gdb foo.cpp
gdb> dir /hom2/another_src
Ceci ajoutera un chemin à la recherche de fichier
gdb> break 'some_class::func<TAB><TAB>
Ce qui complètera le nom de la fonction en vous évitant le temps de
frappe... et sortira comme -
gdb> break 'some_class::function_foo_some_where(int aa, float bb)'
Taper la touche TAB deux fois permet le complément de la ligne de commande, sauvant ainsi beaucoup de temps de frappe. C'est l'une des techniques les plus importantes pour l'utilisation de gdb.
Pour obtenir de l'aide en ligne -
gdb> help
Donne l'aide en ligne
gdb> help breakpoints
Donne plus de détails sur les points d'ancrage.
Pour placer les points d'ancrage et effectuer du déboguage
unixprompt> gdb exe_filename
gdb> b main
Ceci mettra un point d'ancrage dans la fonction main()
gdb> b 123
Ceci mettra un point d'ancrage à la ligne 123 du fichier courant
gdb> help breakpoints
Donne plus de détails sur les points d'ancrage.
Pour analyser des core dumps :
unixprompt> gdb exe_filename core
gdb> bt
Donne une trace de retour des fonctions et les numéros de lignes où le
programme a échoué
gdb> help backtrace
Donne plus de détails sur la trace de retour.
Vous pouvez aussi utiliser une version GUI de gdb appellée xxgdb.
Outils de perte de mémoire -
Voyez les pages de manuel en ligne. Au prompt unix, tapez 'man vim' et 'man gvim'.
Ou lors d'une session gvim tapez :help pour obtenir la page d'aide. Voyez aussi le Tutoriel Vim
La page principale de ViM se trouve sur http://www.vim.org, et son site miroir aux US est sur http://www.us.vim.org.
La FAQ ViM est sur http://www.grafnetix.com/~laurent/vim/faq.html et sur http://www.vim.org/faq.
La page ViM d'Eli se trouve sur http://www.netusa.net/~eli/src/vim.html.
La page des amoureux de Vi sur http://www.cs.vu.nl/~tmgil/vi.html.
Le guide de référence sur ViM sur http://scisun.sci.ccny.cuny.edu/~olrcc/vim/.
Les listes de diffusion ViM sont sur http://www.findmail.com/listsaver/vimannounce.html et http://www.vim.org/mail.html.
Les archives des listes sont conservées sur :
Les macros ViM sont sur http://www.grafnetix.com/~laurent/vim/macros.html.
Sur les systèmes Linux, on trouve souvent le tutoriel dans /usr/doc/vim-common-5.*/tutor, sur les autres systèmes Unix cherchez le répertoire où ViM est installé et cherchez le répertoire doc.
bash$ cd /usr/doc/vim-common*/tutor bash$ less README.txt bash$ cp tutor $HOME bash$ cd $HOME bash$ less tutor
Il y a de nombreux tutoriels Vi sur Internet. Sur Yahoo (Lycos, excite ou Hotbot), entrer « Vi Tutorial » dans le champ de recherche vous renverra de nombreux pointeurs.
Dans ce tutoriel, nous décrirons quelques commandes et concepts vi avancés, vous pourrez ainsi apprécier la puissance de vi et décider de construire vos connaissances avec les commandes vi. Quasiment toutes les références listent les commandes disponibles, mais beaucoup ne montrent pas comment ces commandes interagissent ; ce point précis est le thème principal de ce tutoriel.
Les commandes du mouvement du curseur de vi vous permettent de positionner le curseur dans le fichier et/ou à l'écran de manière efficace, avec un nombre minimal de frappe de touches. Il y a de nombreuses commandes contrôlant les mouvements du curseur - n'essayez pas de toute les mémoriser en une fois ! Plus tard, nous verrons que la majeure partie de la puissance de vi vient du mélange entre les commandes de mouvement du curseur et les autres commandes pour effacer, changer, copier, et filtrer le texte.
Veuillez éditer un gros fichier texte (disons, wknight) afin d'expérimenter chaque commande décrite. Gardez en tête que ces commandes ne marchent qu'en Mode Commande, et pas en Mode Insertion ; si vous voyez vos « commandes » dans votre texte, appuyez sur ESC pour retourner en Mode Commande.
La plupart des commandes de mouvements présentées ci-dessus peuvent être précédées d'un compteur de répétitions ; le mouvement est simplement répété le nombre de fois donné :
Nous avons vu que dd efface la ligne courante. Ceci peut être utilisé avec un compteur de répétitions : 3dd efface trois lignes, la ligne courante et les 2 lignes suivantes.
La commande d peut être utilisée comme un « préfixe » pour la plupart des commandes de mouvement ci-dessus pour effacer à peu près toute sorte de parties de texte. Lorsqu'elles sont utilisées avec d, les commandes de mouvements sont appellées des spécificateurs de cibles. On peut donner un compteur de répétition à d (lorsque vous essayez ces expériences, rappellez vous d'appuyer sur u après chaque commande pour annuler l'effacement).
La commande c est similaire à d, à part qu'elle change le mode de vi en insertion, autorisant le texte original (non désiré) à être changé en quelque chose d'autre.
Par exemple, placez le curseur sur le début d'un mot (tapez w pour arriver au début du prochain mot). Ensuite, tapez cw pour changer ce mot. À l'écran, le dernier caractère de ce mot en cours de changement sera remplacé par un symbole $ indiquant la fin du changement ; tapez un nouveau mot (vous réécrirez le mot original à l'écran) et tapez la touche ESC lorsque vous aurez fini. Votre entrée peut être plus longue ou plus courte que le mot en cours de changement.
Placez le curseur au début d'une ligne contenant au moins trois mots, et taper c3w pour changer ces trois mots. Essayez c$ pour changer la fin de la ligne actuelle. Dans tous les cas où le changement affecte uniquement la ligne courante, la fin du changement est indiquée avec $.
Lorsqu'un changement affecte plus que la ligne courante, vi efface le texte original de l'écran et se place en mode insertion. Par exemple, essayez c3+ pour changer la ligne courante et les trois suivantes ; vi supprime les quatres lignes originales de l'écran et se place en mode d'insertion sur une nouvelle ligne blanche. Comme toujours, tapez la touche ESC lorsque vous aurez fini d'entrer votre nouveau texte.
Quelques autres commandes de changement :
La commande y emmène une copie du texte dans un buffer ; le texte copié peut être placé (ou collé) n'importe où dans le fichier en utilisant p ou P.
La forme la plus simple de copie est yy pour copier la ligne courante ; après yy, essayez p pour mettre une copie de la ligne copiée après le curseur. En suivant yy, vous pouvez faire autant de copie de la ligne emmenée que vous le voulez en vous déplaçant dans le fichier et en tapant p.
Pour copier plusieurs lignes, essayez, par exemple, 5yy (copie la ligne courante et les 4 lignes suivantes). p place une copie des lignes emmenées après le curseur ; la séquence 5yyp « marche » mais ce n'est probablement pas ce que vous voudriez faire. La commande P fonctionne comme p, mais place une copie de la ligne au-dessus du curseur ; essayez la séquence 5yyP.
Autres commandes de copie :
La commande de filtrage ! demande le nom d'une commande UNIX (qui doit être un filtre), passe les lignes sélectionnées par ce filtre, en remplaçant les lignes sélectionnées dans le buffer vi avec la sortie de la commande filtrante. La capacité de vi à passer des parties arbitraires de texte au travers de tout filtre UNIX ajoute une flexibilité incroyable à vi, sans « coût supplémentaire » de taille ou de performance à vi même.
Quelques exemples peuvent aider l'illustration. Créez une ligne dans votre fichier contenant juste le mot « who » et absolument aucun autre texte. Placez le curseur sur cette ligne, et tapez !!. Cette commande est analogue à dd, cc, ou yy, mais au lieu d'effacer, de changer ou de copier la ligne courante, elle filtre la ligne courante. Lorsque vous pressez le second !, le curseur descend vers le coin en bas à gauche de l'écran et un simple ! est affiché, vous demandant d'entrer le nom d'un filtre. En tant que nom de filtre, tapez « sh » et pressez la touche Entrée. sh (le shell Bourne) est un filtre ! Il lit l'entrée standard, exécute une partie de l'entrée (c'est-à-dire qu'il exécute des commandes), et envoie sa sortie (la sortie de ces commandes) à la sortie standard. Filtrer la ligne contenant « who » au travers de « sh » remplace la ligne contenant « who » par la liste des utilisateurs du système courant -- directement dans votre fichier !
Essayez de répéter ce procédé avec date. C'est-à-dire, créez une ligne ne contenant rien d'autre que le mot date, puis placez le curseur sur cette ligne, et tapez !!sh et la touche Entrée. La ligne contenant date est remplacée par la sortie de la commande date.
Mettez votre curseur sur la première ligne de la sortie de « who ». Comptez le nombre de lignes. Supposons, par exmple, que ce nombre soit six. Sélectionnez alors ces six lignes à filtrer au travers de sort ; tapez 6!!sort et la touche Entrée. Les six lignes seront passées à sort, et la sortie de sort remplacera les six lignes d'origine.
La commande filtre peut uniquement être utilisée sur des lignes complètes, pas sur des caractères ou des mots.
Quelques autres commandes de filtres (ici, « CR » indique pressez Entrée) :
Vous pouvez marquer des lignes et des caractères pour être utilisés en tant que cible pour des mouvements, effacement, changement, copie, et filtration en utilisant la commande mc, où c est une lettre minuscule.
Par exemple, mettez le curseur au milieu d'un mot et tapez ma. Ceci marque le caractère sous le curseur sous la marque a.
Maintenant, déplacez le curseur en dehors du caractère marqué vers une ligne différente (utilisez les flèches curseur, CTRL-u, ou autre). Pour retourner à la ligne marquée, tapez 'a (c'est-à-dire apostrophe, puis a). Ceci vous place sur le premier caractère non-blanc de la ligne contenant la marque a.
Sortez de la ligne encore une fois. Pour retourner au caractère marqué, tapez `a (apostrophe inverse, puis a). Ceci vous déplacera sur le caractère marqué par a.
Le marquage est habituellement utilisé avec l'effacement, le changement, la copie ou la filtration. Par exemple, déplacez le curseur sur une autre ligne que celle contenant la marque a, et pressez d'a (d, apostrophe, a). Ceci efface de la ligne courante jusqu'à la ligne marquée a incluse.
Mettez le curseur au milieu d'un autre mot et tapez mb pour mettre la marque b. Maintenant, déplacez le curseur hors de ce mot (mais seulement de quelques lignes, ainsi vous pourrez voir ce que nous allons faire plus facilement), et pressez d`b (d, apostrophe inverse, b). Ceci efface le caractère courant jusqu'au caractère marqué par b inclus.
Comme autre exemple, pour trier la sortie de who, marquez la première ligne (ma), puis déplacez le curseur vers la dernière ligne et taper !'asort puis la touche Entrée.
Si vous sautez jusqu'à une marque et que vous décidez de revenir en arrière, de l'endroit d'où vous avez sauté, vous pouvez taper '' (reviens à la ligne) ou `` (reviens au caractère).
Lorsque vous effacez, modifiez, ou copier du texte, le texte original est sauvé (jusqu'au prochain effacement, changement ou copie) dans un tampon non nommé à partir duquel il peut être mis en utilisant p ou P. En utilisant le tampon non nommé, seul le plus récent changement du texte peut être récupéré.
Si vous voulez effacer, changer ou copier plusieurs parties de texte et se souvenir de toutes (jusqu'à un maximum de 26), vous pouvez donner un nom au tampon avec la commande utilisée. Un nom de tampon est de la forme "c (double apostrophe, c minuscule).
Par exemple, tapez "ayy pour copier la ligne courante dans le tampon a, puis déplacez vous sur une autre ligne et tapez "byy pour copier cette ligne dans le tampon b. Maintenant, déplacez vous n'importe où dans le fichier et tapez "ap et "bp pour placer des copies du texte sauvé dans les tampons a et b.
Quelques autres commandes de tampon :
Pour échanger un bloc de texte par un autre dans les lignes de votre fichier, utilisez la commande :s. Quelques exemples de substitutions :
Toutes les commandes de double point débutent avec « : » ; lorsque vous tapez ce symbole, le curseur saute vers le coin bas à gauche de l'écran, et un prompt à deux points est affiché, attendant que vous finissiez la commande.
Quelques exemples importants :
Diverses options peuvent affecter le « confort » de vi. Vous pouvez afficher toutes les diverses options pouvant être utilisées en tapant set all. Vous pouvez également utiliser « :set » pour changer les options.
Par exemple, si vous désirez voir le numéro de ligne pour les lignes du fichier que vous éditez, utilisez la commande :set number. Pour supprimer l'affichage du numéro de ligne, utilisez la commande :set nonumber. La plupart des options peuvent être abrégées ; :set nu affiche le numéro des lignes et :set nonu le supprime.
Si vous utilisez :set nomagic, la signification spéciale des caractères d'expression régulière (point, astérisque, crochet, etc.) est supprimée. Utilisez :set magic pour restaurer ces significations particulières.
Quelques options ont une valeur. Par exemple, :set tabstop=4 affiche les tabulations en quatre caractères d'espace, plutôt que les huit habituels.
Si vous trouvez que vous désirez toujours certaines options placées de certaines manières, vous pouvez mettre ces commandes optionnelles dans un fichier .exrc, ou vous pouvez utiliser la variable d'environnement EXINIT pour spécifier les options désirées.
Par exemple, si votre shell par défaut est le shell Bourne, cette ligne peut aller dans votre fichier .profile :
EXINIT='set nomagic nu tabstop=4'; export EXINIT
setenv EXINIT 'set nomagic nu tabstop=4'
Si vous vous apercevez que vous utilisez encore et encore la même série de commandes simples, vous pouvez les lier à une touche de commande inutilisée en utilisant la commande :map. Si votre lien inclut des caractères de contrôle comme la touche Entrée (ctrl-M en ascii) ou ESC (ctrl-[ en ascii), vous pouvez les faire précéder de ctrl-v pour supprimer leur signification classique.
Par exemple, cette commande relit ctrl-A pour déplacer le curseur de 55 lignes, puis revenir à la ligne vide la plus récente, changer ensuite cette ligne blanche par un saut de page (ctrl-L) et trois lignes blanches. C'est à dire que chaque ctrl-A paginera la page suivante, sans couper de paragraphes entre les pages.
Note : Dans cette commande, chaque caractère de contrôle est représenté par ^C, où C est une lettre majuscule quelconque. Par exemple, ctrl-M est représenté par ^M. De même, lorsque vous entrez cette commande vous ne verrez pas les caractères ctrl-v : chaque ctrl-v se voit remplacé par la signification spéciale du caractère de contrôle suivant, ainsi lorsque vous utiliserez la séquence ^V^M, tout ce que vous verrez à l'écran est un ^M. Dans cette commande, ^M est la touche Entrée et ^[ la touche ESC.
:map ^A 55+?^$^V^Mcc^V^L^V^M^V^M^V^M^V^[
Vous pouvez éditer plusieurs fichiers avec vi en lui donnant plusieurs noms de fichiers en arguments de ligne de commande :
vi croc fatherw wknight
Les commandes :n, :N et :rew sont quelques peu étranges, mais elles ont des bénéfices importants : le contenu des tampons ("a, "b, "c, etc.) sont connus entre les fichiers, et vous pouvez ainsi utiliser :n et :rew avec p et P pour copier le texte vers l'un ou l'autre des fichiers. De même, la plus récente chaîne de recherche des commandes / et ? sont les mêmes suivant les fichiers, et vous pouvez ainsi faire des recherches répétées sur plusieurs fichiers assez facilement.
Par exemple, tentez l'expérience suivante : tout d'abord sortez de vi, et exécutez ensuite vi avec croc et wknight en arguments :
$ vi croc wknight
/the < CR >
Copiez cette ligne dans le tampon a :
"ayy
Maintenant déplacez vous sur le prochain fichier (vous n'avez fait aucun changement à croc, donc ça marchera) :
:n < CR >
Cherchez la ligne suivante contenant « the », sans retaper la chaîne de recherche :
n
Mettez une copie du tampon après la ligne courante dans wknight :
"ap
Descendez de deux lignes, et copiez la ligne courante dans le tampon b :
jj"byy
Sauvez les changements de wknight
:w < CR >
Maintenant, retournez à croc
:rew < CR >
Cherchez encore, et mettez une copie du tampon b après la ligne trouvée :
n"bp
Sauvez les changements, et quittez vi
ZZ
Ce tutoriel était prévu pour vous introduire quelques unes des possibilités de vi que vous pouvez également retrouver dans le manuel vi de votre système ou qui ne sont pas mentionnées dans ce manuel (de nombreux systèmes ont des manuels de qualité très variée).
Vous ne serez pas un expert vi après la lecture de ce tutoriel, mais vous aurez une bonne appréciation des possibilités de vi. Seul le temps et l'effort peuvent vous faire devenir un expert vi. Mais l'efficacité et l'universalité de vi rend cet effort payant dans le long terme.
Vous pouvez avoir décidé que vous détestez vi. Très bien ! Mais prenez garde, vi demeure l'éditeur de texte standard sous UNIX - le seul éditeur sur lequel vous pouvez compter pour être disponible sous tout système UNIX que vous utiliserez - donc même si vous préférez utiliser quelque chose d'autre dans la vie courante, vous seriez avisé de connaître le minimum à propos de vi qui est couvert dans ce tutoriel.
Vi a 3 modes :
Notations :
Le tampon de copie est rempli par TOUTE commande d'effacement, ou explicitement par Y et yy.
Les URLs connexes à ViM sont sur :
Ce document est publié sous 11 formats différents, nommément - DVI, Postscript, Latex, Adobe Acrobat PDF, LyX, GNU-info, HTML, RTF(Rich Text Format), Plain-text, pages man Unix et SGML.
Les documents LaTeX peuvent être convertis en fichiers PDF en produisant simplement une sortie Postscript en utilisant sgml2latex (et dvips) et en utilisant la sortie via la commande Acrobat distill ( http://www.adobe.com) comme suit :
bash$ man sgml2latex bash$ sgml2latex filename.sgml bash$ man dvips bash$ dvips -o filename.ps filename.dvi bash$ distill filename.ps bash$ man ghostscript bash$ man ps2pdf bash$ ps2pdf input.ps output.pdf bash$ acroread output.pdf &
Ce document se trouve sur :
Vous pouvez aussi trouver ce document sur les sites miroirs suivants :
Afin de voir un document au format dvi, utilisez le programme xdvi. Le programme xdvi se trouve dans le paquetage tetex-xdvi*.rpm de la Redhat Linux qui peut se trouver dans ControlPanel | Applications | Publishing | TeX.
Pour lire un document dvi utilisez la commande :
xdvi -geometry 80x90 howto.dvi
man xdvi
Et redimmensionnez la fenêtre avec une souris. Voyez la page man de xdvi. Pour naviguer utilisez les flèches, les touches page up, down, ou également les lettres 'f', 'd', 'u', 'c', 'l', 'r', 'p', 'n' pour monter, descendre, centrer, page suivante, page précédente, etc. Pour supprimer le menu expert appuyez sur 'x'.
Vous pouvez lire le fichier postscript avec le programme 'gv' (ghostview) ou 'ghostscript'. Le programme ghostscript est dans le paquetage ghostscript*.rpm et le programme gv dans gv*.rpm, qui se trouvent sous ControlPanel | Applications | Graphics. Le programme gv est beaucoup plus agréable à utiliser que ghostscript.
Ghostscript et gv sont aussi disponibles sous d'autres plateformes comme OS/2, Windows 95 et NT. Vous pouvez donc lire ce document sur toutes ces plateformes.
Pour lire le document postscript utilisez la commande :
gv howto.ps
ghostscript howto.ps
Vous pouvez lire le document en html en utilisant Netscape Navigator, Microsoft Internet explorer, Redhat Baron ou tout autre des 10 navigateurs web.
Vous pouvez lire la sortie LaTeX ou LyX en utilisant LyX ou vim.
Le Copyright est GNU/GPL comme pour le LDP (Linux Documentation project). Le LDP est un projet GNU/GPL. Les restrictions additionnelles sont - vous devez conserver le nom de l'auteur, l'adresse mail et cette notice de Copyright sur toutes les copies. Si vous effectuez un changement ou une addition à ce document, vous devez notifier tous les auteurs de ce document.