Pages : 1
#1 Le 20/02/2009, à 20:35
- PacoMokette
Vim - Configuration complete
Bonjour a tous,
Cela faisait un bon moment que je n'étais pas venu sur ce forum, mais je ne trouve pas vraiment d'autres endroits qu'ici ou les gens connaissent vraiment vim.
Je ne lance pas ce sujet pour avoir des trolls sur vim VS emacs ^^
En fait j'ai lu quelques sujets sympathiques sur ce forum justement, j'ai appris quelques trucs notamment la configuration d'un fichier ~/.netrc qui permet d'avoir ses mots de passes de connexion ftp stockés.
Si çà vous intéresse je pourrais vous donnez un lien
Sinon je vous sollicite pour que vous m'aidiez a construire un .vimrc complet, car ce qu'on trouve principalement sur le net ce sont la liste des commandes de vim, mais un bon fichier de configuration et une bonne utilisation des fonctions que l'on définie est un atout majeure je pense
J'ai commencé un fichier de configuration, je vous le met ici, si ca peut aider des gens ici :
"Activation de la coloration syntaxique
syntax on
"Activation de l'auto indentation
set cindent
"Modification du modèle de coloration syntaxique
colorscheme default
"Fonction d'affichage d'un message en inverse video
function! s:DisplayStatus(msg)
echohl Todo
echo a:msg
echohl None
endfunction
"Variable d'enregistrement de l'état de la gestion de la souris
let s:mouseActivation = 1
"Fonction permettant l'activation/désactivation de la gestion de la souris
function! ToggleMouseActivation()
if(s:mouseActivation)
let s:mouseActivation = 0
set mouse=n
set paste
call s:DisplayStatus('Désactivation de la gestion souris (mode collage)')
else
let s:mouseActivation = 1
set mouse=a
set nopaste
call s:DisplayStatus('Activation de la gestion de la souris (mode normal)')
endif
endfunction
"Activation par défaut au démarrage de la gestion de la souris
set mouse=a
set nopaste
"Personnalisation de la ligne de status
set statusline=%F%m%r%h%w\ [FORMAT=%{&ff}]\ [TYPE=%Y]\ [ASCII=\%03.3b]\ [Line=%04l]\ [Col=%04v]\ [%p%%]
set laststatus=2
"Activation de l'indentation automatique
set autoindent
"Redéfinitions des tabulations
"set expandtab "Pour remplacer les tabulations par des espaces
set shiftwidth=4
set softtabstop=4
set tabstop=4
"Fonction de 'nettoyage' d'un fichier :
"Suppression des caractères ^M en fin de ligne
function CleanCode()
%s/^M//g
call s:DisplayStatus('Code nettoyé')
endfunction
"Déplacement de l'onget courant vers la gauche ou vers la droite
function! MoveTab(direction)
if(a:direction ='left')
let tabNum = tabpagenr()-2
if(tabNum <0)
let tabNum = 0
endif
execute 'tabm ' . tabNum
else
let tabNum = tabpagenr()
execute 'tabm ' . tabNum
endif
endfunction
"Ajout de la numérotation des lignes
set number
highlight LineNr ctermbg=black ctermfg=gray
"Ajout d'une ligne colorée pour surligné la ligne en cours
"set cursorline
"highlight CursorLine term=reverse cterm=reverse
"Amélioration de la lisibilité des nomsdes onglets
highlight TabLine term=none cterm=none
highlight TabLineSel ctermbg=darkblue
"Définition du style d'affichage des signets
sign define information text=>> linehl=Warning texthl=Error
"Variable d'enregistrement des identifiants designets pour chaque buffer
let s:signMarks ={}
"Variable d'enregistrement des sauts sur les signets de chaque buffer
let s:jumpMarks ={}
"Fonctin de marquage des signets
function! MarkSign()
let filename = bufname(winbufnr(winnr()))
if(has_key(s:signMarks, filename))
let s:signMarks[filename] +=1
else
let s:signMarks[filename] =1
endif
exe ':sign place ' . s:signMarks[filename] . ' line=' /line(.) .' name=information file=' .expand ('%:p')
endfunction
"Fonction de saut sur un signet
function! JumpToSign()
let filename = bufname(winbufnr(winnr()))
if(has_key(s:signMarks, filename))
if(has_key(s:jumpMarks, filename))
let s:jumpMarks[filename] +=1
else
let s:jumpMarks[filename] = 1
endif
if(s:jumpMarks[filename] > s:signMarks[filename])
let s:jumpMarks[filename] = 1
endif
silent! execute ':sign jump ' . s:jumpMarks[filename] . 'file=' . expand('%:p')
endif
endfunction
"Autorisation de remonter ou descendre d'une ligne avec les flèches
"gauche ou droite
set whichwrap=b,s,<,>,[,]
"Ouverture des fichiers avec le curseur à la position de la dernière édition
function! s:Cursor0ldPosition()
if line("'\"") > 0 && line("'\"") <= line("$")
exe "normal g`\""
endif
endfunction
autocmd BufReadPost * silent! call s:CursorOldPosition()
"Repli de code
"Affichage textuel personnalisé lors d'un pliage
function! MyFoldFunction()
{
let line = getline(v:foldstart)
let sub = substitute(line, '/\*\|\*/\|^\s+', '', 'g')
let lines = v:foldend - v:foldstart +1
return '[+] '. v:folddashes.sub .'...' . lines . 'lignes...'
getline(v:foldend)
endfunction
"activation de la gestion des ouvertures/fermetures des replis de code
set foldenable
"Affichage d'une ligne de '=' sur les pliages
set fillchars=fold:=
"Definition personnaelle de l'affichage du pliage
set foldtext=MyFoldFunction()
let php_folding=1
Je precise que tout ne marche pas ( j'ai recopier un linux magazine, mais j'ai mal du recopier )
Et je ne sais pas comment me servir de toutes les fonctions aussi ^^'
Je vous demande quelques conseils pour la programmation notamment en C et en PHP
En fait le php est pire a configurer que le C AMHA
Je voudrais savoir si a partir d'un fichier php quelconque je pouvais avoir une indentation particuliere
Je vous explique ma maniere a moi de coder ( je reconnais que c'est peut etre un peu exotique, enfin je ne sais pas trop, mais je m'y retrouve vraiment bien
<html>
<body>
<?php
echo "bonjour";
?>
<p>
<p>
<?php echo $var; ?>
</p>
</p>
<h1> Bonjour <?php echo $nom; ?> </h1>
</body>
</html>
Mon type d'indentation en C :
#include <stdio.h>
int main()
{
while(1)
{
printf("Hello World");
}
}
Voila j'accepte tous les commentaires
Merci d'avance
Hors ligne
#2 Le 20/02/2009, à 20:42
- geenux
Re : Vim - Configuration complete
"set expandtab "Pour remplacer les tabulations par des espaces
Décommente cette ligne, surtout si tu compte travailler sur des projets à plusieurs (mais même seul). Les tabulations ne sont pas forcéments interprétées de la même façon par les différents éditeurs, et ça peux conduire à des résultats étranges.
Je pense que ton .vimrc est long inutilement... Il y a une bonne partie des fonctions que tu n'utilisera jamais. Tu devrais au moins le séparer en plusieurs fichiers (et les inclures ensuites dans ton .vimrc).
Le style d'indentation lors d'un mélange php / html est assez embétant avec vim... Si je me souviens bien, il y a un plugin qui permet d'améliorer ça.
Hors ligne
#3 Le 20/02/2009, à 21:14
- PacoMokette
Re : Vim - Configuration complete
Bah je n'aime pas trop les espaces a la place des tabulations. Pour le moment je n'ai jamais eut de problemes a cause de ca. C'est vraiment important ?
sinon ca m'interesse ton histoire de plug in je vais essayer de me renseigner, mais a mon avis je vais avoir un peu de mal :S
Ah oui autre chose concernant le php, si on tape la commande gg=G ca reindente le code n'importe comment, il me semble que tout reviens a gauche :S
Hors ligne
#4 Le 20/02/2009, à 22:02
- geenux
Re : Vim - Configuration complete
Bah je n'aime pas trop les espaces a la place des tabulations. Pour le moment je n'ai jamais eut de problemes a cause de ca. C'est vraiment important ?
Tant que tu code dans ton coin, non. Dès que tu commence à envoyer des patch à d'autres personnes, oui.
C'est ce dont je parlais pour l'indentation php (gg=G déplorable). Il me semble que j'avais vu un plugin, mais je ne l'ai jamais utilisé, donc je ne connais ni son nom, ni son efficacité.
Hors ligne
#5 Le 20/02/2009, à 22:59
- PacoMokette
Re : Vim - Configuration complete
On vient de me donner un lien pour un plug in :
http://www.vim.org/scripts/script.php?script_id=604
Je vais le tester.
Je vous dis ce que j'en pense apres
Sinon j'ai une petite question :
On m'a donné une commande assez exotique pour passer d'une indentation :
int main(){
}
celle ci :
int main()
{
}
Je voudrais savoir si on pouvait faire une sorte d'alias dans le vimrc ? pour qu'il soit plus simple a utiliser.
Merci d'avance
Hors ligne
#6 Le 21/02/2009, à 08:52
- geenux
Re : Vim - Configuration complete
map touche commande
Ça créé un raccourcis clavier vers une commande.
Par exemple, pour ton cas, ça donnerai un truc du genre
map <C-i> <esc>$F{x<cr>i{
Et tu pourrai le lancer avec Ctrl+i
Sinon je viens de tester le plugin, ça marche pas mal. Quelques petits problèmes, mais rien de bien méchant.
Hors ligne
#7 Le 21/02/2009, à 15:03
- PacoMokette
Re : Vim - Configuration complete
J'ai moi aussi tester le php.vim, je le trouve plutot bien, hormis deux choses :
je n'ai plus de coloration syntaxique avec ce plug in, et l'indentation n'est pas exactement comme je la veux, enfin pour le deuxieme point c'est moins grave quand meme ^^
Sinon je me renseigne sur la doc vim pour map, parce que ca a l'air un peu dur a utiliser ( je comprends le debut de la commande, mais pas le $F{x<cr>i{
Enfin merci encore
Hors ligne
#8 Le 21/02/2009, à 16:34
- geenux
Re : Vim - Configuration complete
Sinon je me renseigne sur la doc vim pour map, parce que ca a l'air un peu dur a utiliser ( je comprends le debut de la commande, mais pas le $F{x<cr>i{
En fait c'était une façon tordue de faire ce que tu voulais faire.
Je vais décomposer un peu $F{xo{ :
$ : aller à la fin de la ligne
F{ : rechercher le { en arrière
x : le supprimer
o : ouvrir une ligne en insertion sous le curseur
{ : insérer le nouveau {
Et on mappe le tout:
map touche $F{xo{
Sinon, moi j'ai toujours la coloration syntaxique quand j'ai le plugin php.vim.
Comment l'as tu installé ?
Hors ligne
#9 Le 21/02/2009, à 16:50
- PacoMokette
Re : Vim - Configuration complete
Alors pour l'installation sur un salon Jabber on m'a dit de le mettre dans /usr/share/vim/vimcurrent/syntax
et ca remplace l'ancien php.vim
sinon pour ta commande je viens de l'essayer, je ne sais pas si je l'utilise mal, mais une fois le fichier ouvert je fais CTRL + i ( i et CTRL en meme temps ) ca met mon curseur en fin de ligne ( peut etre a cause du $ du map )
je me trompe peut etre :S
Hors ligne
#10 Le 21/02/2009, à 16:56
- geenux
Re : Vim - Configuration complete
J'avais fait une petite erreur dans le premier, t'as fait avec le mapping de la fin du 2ème message.
Sinon, php.vim n'est pas un script de coloration (enfin pas celui là), donc ce n'étais pas là qu'il fallait le mettre.
Tu peux, par exemple le mettre dans ~/.vim/ftplugin/php/
Il faudra que tu remette le script original php.vim dans le répertoire syntax si tu veux récupérer la coloration syntaxique.
Hors ligne
#11 Le 21/02/2009, à 17:16
- PacoMokette
Re : Vim - Configuration complete
Pour la commande de map, j'ai essayé les deux ca me donne le meme resultat, j'ai du oublier quelque chose :S
Sinon j'ai deja recuperer l'ancien php.vim ^^
Je place le nouveau php.vim dans le dossier que tu m'as indiqué
argh ils ont supprimé le script, ou alors une erreur sur le serveur
Hors ligne
#12 Le 21/02/2009, à 18:02
- geenux
Re : Vim - Configuration complete
Le voilà :
" Vim indent file
" Language: Php
" Authors: Miles Lott <milos@groupwhere.org>, Johannes Zellner <johannes@zellner.org>, Pim Snel <pim@lingewoud.nl>
" URL: http://lingewoud.nl/downloads.php
" Last Change: 23 feb 2004
" Version: 0.3
" Notes: This is a combination of the PHP indent file of Miles Lott with
" the HTML indent file of Johannes Zellner. Usefull for editing
" php-files with html parts in it.
"
" Changelog:
" 0.3 - 25 mar 2004
" - fixed wrong indention when a php-tag is opened and closed on
" one single line.
" 0.2 - 23 feb 2004
" - applied patch from Holger Dzeik <dzeik@nentec.de>
" - added changelog
" - added default indention of 3 spaces after the <?php for better
" reading
" - replaced URL
" - reformatted the options section
" 0.1 - 27 mar 2003
" - initial creation of html-enhanced php indent-file
" Options:
let php_noindent_switch=0 " set this to '1' to not try to indent switch/case statements
set sw=3 " default shiftwidth of 3 spaces
if exists("b:did_indent")
finish
endif
let b:did_indent = 1
setlocal indentexpr=GetPhpIndent()
"setlocal indentkeys+=0=,0),=EO
setlocal indentkeys+=0=,0),=EO,o,O,*<Return>,<>>,<bs>,{,}
" Only define the function once.
if exists("*GetPhpIndent")
finish
endif
" Handle option(s)
if exists("php_noindent_switch")
let b:php_noindent_switch=1
endif
if exists('g:html_indent_tags')
unlet g:html_indent_tags
endif
function GetPhpIndent()
" Find a non-empty line above the current line.
let lnum = prevnonblank(v:lnum - 1)
" Hit the start of the file, use zero indent.
if lnum == 0
return 0
endif
let line = getline(lnum) " last line
let cline = getline(v:lnum) " current line
let pline = getline(lnum - 1) " previous to last line
let ind = indent(lnum)
let restore_ic=&ic
let &ic=1 " ignore case
let ind = <SID>HtmlIndentSum(lnum, -1)
let ind = ind + <SID>HtmlIndentSum(v:lnum, 0)
let &ic=restore_ic
let ind = indent(lnum) + (&sw * ind)
" Indent after php open tags
if line =~ '<?php' && line !~ '?>'
let ind = ind + &sw
endif
if cline =~ '^\s*[?>]' " // Fix from Holger Dzeik <dzeik@nentec.de> Thanks!
let ind = ind - &sw
endif
if exists("b:php_noindent_switch") " version 1 behavior, diy switch/case,etc
" Indent blocks enclosed by {} or ()
if line =~ '[{(]\s*\(#[^)}]*\)\=$'
let ind = ind + &sw
endif
if cline =~ '^\s*[)}]'
let ind = ind - &sw
endif
return ind
else " Try to indent switch/case statements as well
" Indent blocks enclosed by {} or () or case statements, with some anal requirements
if line =~ 'case.*:\|[{(]\s*\(#[^)}]*\)\=$'
let ind = ind + &sw
" return if the current line is not another case statement of the previous line is a bracket open
if cline !~ '.*case.*:\|default:' || line =~ '[{(]\s*\(#[^)}]*\)\=$'
return ind
endif
endif
if cline =~ '^\s*case.*:\|^\s*default:\|^\s*[)}]'
let ind = ind - &sw
" if the last line is a break or return, or the current line is a close bracket,
" or if the previous line is a default statement, subtract another
if line =~ '^\s*break;\|^\s*return\|' && cline =~ '^\s*[)}]' && pline =~ 'default:'
let ind = ind - &sw
endif
endif
if line =~ 'default:'
let ind = ind + &sw
endif
return ind
endif
endfunction
" [-- local settings (must come before aborting the script) --]
"setlocal indentexpr=HtmlIndentGet(v:lnum)
"setlocal indentkeys=o,O,*<Return>,<>>,<bs>,{,}
" [-- helper function to assemble tag list --]
fun! <SID>HtmlIndentPush(tag)
if exists('g:html_indent_tags')
let g:html_indent_tags = g:html_indent_tags.'\|'.a:tag
else
let g:html_indent_tags = a:tag
endif
endfun
" [-- <ELEMENT ? - - ...> --]
call <SID>HtmlIndentPush('a')
call <SID>HtmlIndentPush('abbr')
call <SID>HtmlIndentPush('acronym')
call <SID>HtmlIndentPush('address')
call <SID>HtmlIndentPush('b')
call <SID>HtmlIndentPush('bdo')
call <SID>HtmlIndentPush('big')
call <SID>HtmlIndentPush('blockquote')
call <SID>HtmlIndentPush('button')
call <SID>HtmlIndentPush('caption')
call <SID>HtmlIndentPush('center')
call <SID>HtmlIndentPush('cite')
call <SID>HtmlIndentPush('code')
call <SID>HtmlIndentPush('colgroup')
call <SID>HtmlIndentPush('del')
call <SID>HtmlIndentPush('dfn')
call <SID>HtmlIndentPush('dir')
call <SID>HtmlIndentPush('div')
call <SID>HtmlIndentPush('dl')
call <SID>HtmlIndentPush('em')
call <SID>HtmlIndentPush('fieldset')
call <SID>HtmlIndentPush('font')
call <SID>HtmlIndentPush('form')
call <SID>HtmlIndentPush('frameset')
call <SID>HtmlIndentPush('h1')
call <SID>HtmlIndentPush('h2')
call <SID>HtmlIndentPush('h3')
call <SID>HtmlIndentPush('h4')
call <SID>HtmlIndentPush('h5')
call <SID>HtmlIndentPush('h6')
call <SID>HtmlIndentPush('i')
call <SID>HtmlIndentPush('iframe')
call <SID>HtmlIndentPush('ins')
call <SID>HtmlIndentPush('kbd')
call <SID>HtmlIndentPush('label')
call <SID>HtmlIndentPush('legend')
call <SID>HtmlIndentPush('map')
call <SID>HtmlIndentPush('menu')
call <SID>HtmlIndentPush('noframes')
call <SID>HtmlIndentPush('noscript')
call <SID>HtmlIndentPush('object')
call <SID>HtmlIndentPush('ol')
call <SID>HtmlIndentPush('optgroup')
call <SID>HtmlIndentPush('pre')
call <SID>HtmlIndentPush('q')
call <SID>HtmlIndentPush('s')
call <SID>HtmlIndentPush('samp')
call <SID>HtmlIndentPush('script')
call <SID>HtmlIndentPush('select')
call <SID>HtmlIndentPush('small')
call <SID>HtmlIndentPush('span')
call <SID>HtmlIndentPush('strong')
call <SID>HtmlIndentPush('style')
call <SID>HtmlIndentPush('sub')
call <SID>HtmlIndentPush('sup')
call <SID>HtmlIndentPush('table')
call <SID>HtmlIndentPush('textarea')
call <SID>HtmlIndentPush('title')
call <SID>HtmlIndentPush('tt')
call <SID>HtmlIndentPush('u')
call <SID>HtmlIndentPush('ul')
call <SID>HtmlIndentPush('var')
" [-- <ELEMENT ? O O ...> --]
if !exists('g:html_indent_strict')
call <SID>HtmlIndentPush('body')
call <SID>HtmlIndentPush('head')
call <SID>HtmlIndentPush('html')
call <SID>HtmlIndentPush('tbody')
endif
" [-- <ELEMENT ? O - ...> --]
if !exists('g:html_indent_strict_table')
call <SID>HtmlIndentPush('th')
call <SID>HtmlIndentPush('td')
call <SID>HtmlIndentPush('tr')
call <SID>HtmlIndentPush('tfoot')
call <SID>HtmlIndentPush('thead')
endif
delfun <SID>HtmlIndentPush
set cpo-=C
" [-- count indent-increasing tags of line a:lnum --]
fun! <SID>HtmlIndentOpen(lnum)
let s = substitute('x'.getline(a:lnum),
\ '.\{-}\(\(<\)\('.g:html_indent_tags.'\)\>\)', "\1", 'g')
let s = substitute(s, "[^\1].*$", '', '')
return strlen(s)
endfun
" [-- count indent-decreasing tags of line a:lnum --]
fun! <SID>HtmlIndentClose(lnum)
let s = substitute('x'.getline(a:lnum),
\ '.\{-}\(\(<\)/\('.g:html_indent_tags.'\)\>>\)', "\1", 'g')
let s = substitute(s, "[^\1].*$", '', '')
return strlen(s)
endfun
" [-- count indent-increasing '{' of (java|css) line a:lnum --]
fun! <SID>HtmlIndentOpenAlt(lnum)
return strlen(substitute(getline(a:lnum), '[^{]\+', '', 'g'))
endfun
" [-- count indent-decreasing '}' of (java|css) line a:lnum --]
fun! <SID>HtmlIndentCloseAlt(lnum)
return strlen(substitute(getline(a:lnum), '[^}]\+', '', 'g'))
endfun
" [-- return the sum of indents respecting the syntax of a:lnum --]
fun! <SID>HtmlIndentSum(lnum, style)
if a:style == match(getline(a:lnum), '^\s*</')
if a:style == match(getline(a:lnum), '^\s*</\<\('.g:html_indent_tags.'\)\>')
let open = <SID>HtmlIndentOpen(a:lnum)
let close = <SID>HtmlIndentClose(a:lnum)
if 0 != open || 0 != close
return open - close
endif
endif
endif
if '' != &syntax &&
\ synIDattr(synID(a:lnum, 1, 1), 'name') =~ '\(css\|java\).*' &&
\ synIDattr(synID(a:lnum, strlen(getline(a:lnum)) - 1, 1), 'name')
\ =~ '\(css\|java\).*'
if a:style == match(getline(a:lnum), '^\s*}')
return <SID>HtmlIndentOpenAlt(a:lnum) - <SID>HtmlIndentCloseAlt(a:lnum)
endif
endif
return 0
endfun
" vim: set ts=3 sw=3:
Sinon en effet, je viens de tester mon mapping, ça ne fonctionne pas (bizzare).
Enfin, reprend ta "commande assez exotique pour passer d'une indentation" et sert toi en pour faire le mapping.
Hors ligne
#13 Le 22/02/2009, à 23:05
- PacoMokette
Re : Vim - Configuration complete
Alors voici la commande "exotique" que j'avais parlé un peu avant :
je l'ai mise dans mon vimrc :
map <C-i> <esc>:%s/\S\zs\s*{/\{<CR>
Mais en fait ca ne marche pas a tous les coups ^^'
C'est susceptible d'améliorations a mon avis.
Tu ne connaitrais pas un tutoriel pour maitriser la configuration du fichier ? je suis tombé sur beaucoup de sites parlant du fichier de configuration mais généralement il y a juste la configuration, et aucune explication.
Si vous voulez je peux vous donner les liens.
Voila
Hors ligne
Pages : 1