" *** On met des zolies couleurs ***"
syntax on
" Si il s'agit d'un fichier tex on appelle la procédure FT_tex()
au FileType tex call FT_tex()
" note : ctags fonctionne avec CTRL-] et CTRL-T "
" note : le mode visual v sélectionne des caractères "
" note : le mode visual V sélectionne des lignes "
" note : le mode visual CTRL-v sélectionne des blocs "
" CTRL-N et CTRL-P servent à la complétion de noms
" Fenetres :
" CTRL-W s ou :split ==> sépare la fenetre en deux parties
" :split fichier ==> split et édite le fichier dans l'une des deux parties
" :sf fichier ==> idem mais en relatif (path)
" CTRL-W ] ==> crée une nouvelle fenetre qui contient le tag
" CTRL-W f ==> crée une nouvelle fenetre qui contient le fichier sous le curseur
" CTRL-W n ==> crée une nouvelle fenetre vide
" CTRL-W q ==> ferme la fenetre courante
" CTRL-W j ==> passe à la fenetre du dessous
" CTRL-W k ==> passe à la fenetre du dessus
" CTRL-W p ==> swap entre le fenetres
" CTRL-W x ==> echange la fenetre courante avec la suivante
" CTRL-W = ==> toutes les fenetres ont la meme taille
" CTRL-W - ==> diminue la taille de la fenetre courante
" CTRL-W + ==> augmente la taille de la fenetre courante
" CTRL-W _ ==> agrandit la fenetre
" autorise les menus en mode texte
source $VIMRUNTIME/menu.vim
set wildmenu
set cpo-=<
set wcm=<C-Z>
map <F9> :emenu <C-Z>
" autorise le menu popup avec la souris
set mousemodel=popup
" mets la completion en menu
set wildmenu
" fonctions rusées pour vim
" Luc Hermitte hermitte@laas.fr
" vnoremap _b s\textbf{}<ESC>P
" vnoremap _b s{\em }<ESC>P
" vnoremap _ls <ESC>I"\item \"<ESC>S\begin{itemize}<CR>\end{itemize}<ESC>P
" noremap <F3> :!xdvi %<.dvi <CR>
" :s/.*/\="\\\\item ".submatch(0)/
" *** Fonctions générales *********************************************************************************** "
function MakeList (text1, text2, text3) range
exe (a:firstline) . "," . a:lastline . 's/^/' . a:text3
if (strlen(a:text1) > 0)
exe append (a:firstline -1 ,a:text1)
endif
if (strlen(a:text2) > 0)
exe append (a:lastline +1, a:text2)
endif
endfunction
function MakeTab () range
let pos = 0
let nb_colonnes = 0
let ret = 0
" pour vim >= 6, cette macro devrait marcher pour déterminer
" automatiquement le nombre de colonnes du tableau :
" let ret = match(getline(a:firstline),'\t',pos)
" while (ret != -1)
" let pos = ret + 1
" let ret = match(getline(a:firstline),'\t',pos)
" let nb_colonnes = nb_colonnes + 1
" endwhile
" let nb_colonnes = nb_colonnes + 1
" sinon, on demande le nombre à l'utilisateur :
let nb_colonnes = input ("Entrez le nombre de colonnes du tableau : ")
let pos = 0
let options = "{|"
while (pos < nb_colonnes)
let options = options . "c"
let pos = pos + 1
endwhile
let options = options . "|}"
"let sep = confirm ("Séparation :","&Contour\n&Aucune\nA Chaque &Ligne")
let sep = 1
let text1 = "\\begin{tabular}" . options
let text2 = "\\end{tabular}"
if (sep == 3)
exe (a:firstline) . "," . a:lastline . 's/$/\\\\\\hline'
else
exe (a:firstline) . "," . a:lastline . 's/$/\\\\'
endif
exe (a:firstline) . "," . a:lastline . 's/\t\+/ \& /g'
if ((sep == 1) || (sep == 3))
exe append (a:firstline -1 ,"\\hline")
exe append (a:firstline +1 ,"\\hline")
exe append (a:firstline -1 ,text1)
if (sep == 1)
exe append (a:lastline +3 ,"\\hline")
exe append (a:lastline +4, text2)
else
exe append (a:lastline +3, text2)
endif
else
exe append (a:firstline -1 ,text1)
exe append (a:lastline +1, text2)
endif
endfunction
function RemoveComments () range
exe (a:firstline) . "," . a:lastline . 's/^% /'
endfunction
function FT_tex()
"syn region myFold start="\begin {document}" end="\end {document}" transparent fold
"syn sync fromstart
"setlocal foldmethod=marker
" on redéfinit le mode quickfix de vim pour gérer du latex
" les commandes utiles sont :
" cc pour afficher l'erreur
" cn pour afficher l'erreur suivante
" cp pour afficher l'erreur precedente
" cl pour afficher la liste des erreurs
set makeprg=latex\ \\\\nonstopmode\ \\\\input\\{$*}
set efm=%E!\ LaTeX\ %trror:\ %m,
\%E!\ %m,
\%+WLaTeX\ %.%#Warning:\ %.%#line\ %l%.%#,
\%+W%.%#\ at\ lines\ %l--%*\\d,
\%WLaTeX\ %.%#Warning:\ %m,
\%Cl.%l\ %m,
\%+C\ \ %m.,
\%+C%.%#-%.%#,
\%+C%.%#[]%.%#,
\%+C[]%.%#,
\%+C%.%#%[{}\\]%.%#,
\%+C<%.%#>%.%#,
\%C\ \ %m,
\%-GSee\ the\ LaTeX%m,
\%-GType\ \ H\ <return>%m,
\%-G\ ...%.%#,
\%-G%.%#\ (C)\ %.%#,
\%-G(see\ the\ transcript%.%#),
\%-G%*\\s,
\%+O(%f)%r,
\%+P(%f%r,
\%+P\ %\\=(%f%r,
\%+P%*[^()](%f%r,
\%+P[%\\d%[^()]%#(%f%r,
\%+Q)%r,
\%+Q%*[^()])%r,
\%+Q[%\\d%*[^()])%r
" *** Si on est en mode graphique, on modifie les icones de la toolbar *** "
if has ("gui_running")
" on enleve la toolbar par défaut, et on mets la notre
unmenu ToolBar
unmenu! ToolBar
" toolbar
amenu 1.10 ToolBar.Open :browse e<CR>
tmenu ToolBar.Open Open file
amenu 1.20 ToolBar.Save :w<CR>
tmenu ToolBar.Save Save current file
amenu 1.30 ToolBar.SaveAll :wa<CR>
tmenu ToolBar.SaveAll Save all files
amenu 1.40 ToolBar.Undo u
tmenu ToolBar.Undo Undo
amenu 1.50 ToolBar.Redo <C-R>
tmenu ToolBar.Redo Redo
amenu 1.60 ToolBar.Make :make % <CR>
amenu 1.70 ToolBar.View :!xdvi %<.dvi <CR>
amenu 1.80 ToolBar.Print :!dvips %<.dvi <CR>
amenu 1.90 ToolBar.Xfig :!xfig <CR>
vmenu 1.100 ToolBar.Bold s\textbf{}<Esc>P
tmenu ToolBar.Bold Bold Text
vmenu 1.100 ToolBar.Italic s\textit{}<Esc>P
tmenu ToolBar.Italic Italic
vmenu 1.100 ToolBar.SmallCaps s\textsc{}<Esc>P
tmenu ToolBar.SmallCaps SmallCaps
vmenu 1.100 ToolBar.Part s\part{}<Esc>P
tmenu ToolBar.Part Parts
vmenu 1.100 ToolBar.Chapter s\chapter{}<Esc>P
tmenu ToolBar.Chapter Chapters
vmenu 1.100 ToolBar.Section s\section{}<Esc>P
vmenu 1.100 ToolBar.SubSection s\subsection{}<Esc>P
vmenu 1.100 ToolBar.SubSubSection s\subsubsection{}<Esc>P
vmenu 1.180 ToolBar.Left S\begin{center}<CR>\end{center}<ESC>P
vmenu 1.180 ToolBar.Center S\begin{flushleft}<CR>\end{flushleft}<ESC>P
vmenu 1.180 ToolBar.Right S\begin{right}<CR>\end{right}<ESC>P
vmenu 1.180 ToolBar.Tabular :call MakeTab() <CR>
endif
" *** on rajoute quelques mapping de touches *** "
map <F2> :make %<CR>
map <F3> :!xdvi %<.dvi<CR>
map <F4> :!dvips %<.dvi<CR>
map <F5> :!xfig<CR>
map <F6> :!aspell --mode=tex check % <CR> :e!<CR>
map <F7> :!gaspell --mode=tex %<CR> :e!<CR>
map <F10> :echo "Fonctions : <F2> make <F3> voir <F4> imprimer <F5> xfig <F6> aspell <F7> gaspell" <CR>
"map <F10> :call Folding() <CR>
"setlocal foldmethod=expr
"setlocal foldexpr=LatexFoldLevel(v:lnum)
"setlocal foldcolumn=4
" *** raccourcis non visuels *** "
"nmap _b !!encapsule "\textbf{" "}" <CR>
"nmap _i !!encapsule "\textit{" "}" <CR>
"nmap _sc !!encapsule "\textsc{" "}" <CR>
"nmap _pa !!encapsule "\part{" "}" <CR>
"nmap _ch !!encapsule "\chapter{" "}" <CR>
"nmap _se !!encapsule "\section{" "}" <CR>
"nmap _s2 !!encapsule "\subsection{" "}" <CR>
"nmap _s3 !!encapsule "\subsubsection{" "}" <CR>
"nmap _t !!encapsule "\item " "" <CR>
"nmap _mc !!encapsule "\% " "" <CR>
"nmap _ls !!encapsule "\begin{itemize} " "\end{itemize}" -n<CR>
"nmap _le !!encapsule "\begin{enumerate} " "\end{enumerate}" -n<CR>
"nmap _vr !!encapsule "\vref{" "}" <CR>
" *** raccourcis visuels *** "
" on n'utilise _que_ des raccourcis visuels, car on ne modifiera que ce que l'on
" aura clairement sélectionné. c'est comme ça et pi c'est tout, na.
" (nan mais c'est vrai aussi, quoi.)
" bref. Donc on a d'abord des modification de style de texte :
" gras, italique, petites majuscules, souligné, à l'indice, à l'exposant.
vn _b s\textbf{}<ESC>P " gras
vn _i s\textit{}<ESC>P " italique
vn _sc s\textsc{}<ESC>P " petites majuscules
" on a ensuite des modifications 'visuelles' :
vn _pc S\begin{center}<CR>\end{center}<ESC>P " On centre le texte
vn _pl S\begin{flushleft}<CR>\end{flushleft}<ESC>P " On aligne le texte à gauche
vn _pr S\begin{right}<CR>\end{right}<ESC>P " On aligne le texte à droite
vn _pv S\begin{verbatim}<CR>\end{verbatim}<ESC>P " On mets le texte en mode verbatim
vn _fg S\begin{figure}[h]<CR>\end{figure}<ESC>P " hmpf. une figure.
" voici ensuite les modifications 'structurelles'
" partie, chapitre, section, subsection, subsubsection
vn _pa s\part{}<ESC>P " partie
vn _ch s\chapter{}<ESC>P " chapitre
vn _se s\section{}<ESC>P " section
vn _s2 s\subsection{}<ESC>P " sous-section
vn _s3 s\subsubsection{}<ESC>P " sous-sous-section
" puis les modifications de 'navigation' :
" notes de pied de page, références.
vn _ft s\footnote{}<ESC>P " note de bas de page
vn _lb s\label{}<ESC>P " on définit un label
vn _rf s\ref{}<ESC>P " on affiche une référence
vn _vr s\vref{}<ESC>P " on affiche une vréférence
" Nous voici aux listes...
vn _pt :call MakeList("","", "\\\\item ") <CR> " rajoute des \item devant chaque ligne
vn _mc :call MakeList("","", "\% ") <CR> " rajoute des % devant chaque ligne
vn _xc :call RemoveComments() <CR> " enlève des % devant chaque ligne
" là on définit une liste complète
" avec des tirets ...
vn _ls :call MakeList("\\begin{itemize}","\\end{itemize}", "\\\\item ") <ESC> :'>+2 <CR>
" ... et par énumération
vn _le :call MakeList("\\begin{enumerate}","\\end{enumerate}", "\\\\item ") <ESC> :'>+2 <CR>
" Enfin, on finit par le plat de résistance, un tableau :
vn _mt :call MakeTab() <CR>
endfunction