web-dev-qa-db-fra.com

Quelles sont vos suggestions pour une configuration Vim idéale pour le développement Perl?

Il y a beaucoup de discussions sur la façon de configurer Vim/GVim pour le développement Perl sur PerlMonks.org . En publiant cette question, mon objectif est d’essayer de créer, autant que possible, une configuration idéale pour le développement de Perl avec Vim/GVim. S'il vous plaît envoyez vos suggestions pour les paramètres .vimrc ainsi que des plugins utiles.

Je vais essayer de fusionner les recommandations dans un ensemble de paramètres .vimrc et dans une liste de plugins recommandés, de ftplugins et de fichiers de syntaxe.

paramètres .vimrc

"Create a command :Tidy to invoke perltidy"
"By default it operates on the whole file, but you can give it a"
"range or visual range as well if you know what you're doing."
command -range=% -nargs=* Tidy <line1>,<line2>!
    \perltidy -your -preferred -default -options <args>

vmap <tab> >gv    "make tab in v mode indent code"
vmap <s-tab> <gv

nmap <tab> I<tab><esc> "make tab in normal mode indent code"
nmap <s-tab> ^i<bs><esc>

let Perl_include_pod   = 1    "include pod.vim syntax file with Perl.vim"
let Perl_extended_vars = 1    "highlight complex expressions such as @{[$x, $y]}"
let Perl_sync_dist     = 250  "use more context for highlighting"

set nocompatible "Use Vim defaults"
set backspace=2  "Allow backspacing over everything in insert mode"

set autoindent   "Always set auto-indenting on"
set expandtab    "Insert spaces instead of tabs in insert mode. Use spaces for indents"
set tabstop=4    "Number of spaces that a <Tab> in the file counts for"
set shiftwidth=4 "Number of spaces to use for each step of (auto)indent"

set showmatch    "When a bracket is inserted, briefly jump to the matching one"

syntaxe

plugins

ftplugins

Modules CPAN

Outils de débogage

Je viens de découvrir VimDebug . Je n'ai pas encore été en mesure de l'installer sous Windows, mais la description semble prometteuse.

58
Sinan Ünür

De blog de chromatic (légèrement adapté pour pouvoir utiliser le même mapping de tous les modes).

vmap ,pt :!perltidy<CR> 
nmap ,pt :%! perltidy<CR>

appuyez sur ,pt en mode normal pour nettoyer tout le fichier ou en mode visuel pour nettoyer la sélection. Vous pouvez aussi ajouter:

imap ,pt <ESC>:%! perltidy<CR>

Mais l'utilisation de commandes en mode de saisie n'est pas recommandée.

4
Ether

Meilleures pratiques Perl a une annexe sur Configurations de l'éditeur . vim est le premier éditeur répertorié.

3
Permanuno

Regardez aussi Perl-support.vim (un Perl IDE pour Vim/gVim). Fournit des suggestions pour personnaliser Vim (.vimrc), gVim (.gvimrc), les balises ctags, perltidy et Devel: SmallProf en plus de nombreuses autres choses.

3
Fritz G. Mehner

Andy Lester et autres maintiennent les fichiers de support officiels de Perl, Perl 6 et Pod pour Vim sur Github: https://github.com/vim-Perl/vim-Perl

3
daxim
" Create a command :Tidy to invoke perltidy.
" By default it operates on the whole file, but you can give it a
" range or visual range as well if you know what you're doing.
command -range=% -nargs=* Tidy <line1>,<line2>!
    \perltidy -your -preferred -default -options <args>
3
hobbs

Pour ranger, j'utilise ce qui suit: soit \t pour ranger tout le fichier, soit je sélectionne quelques lignes en mode shift+V et je fais ensuite \t

nnoremap <silent> \t :%!perltidy -q<Enter>
vnoremap <silent> \t :!perltidy -q<Enter>

Parfois, il est également utile de supprimer du code. Comme les lignes ci-dessus, soit pour le fichier entier ou pour une sélection.

nnoremap <silent> \D :.!Perl -MO=Deparse 2>/dev/null<CR>
vnoremap <silent> \D :!Perl -MO=Deparse 2>/dev/null<CR>
2
mfontani

J'en ai 2.

Le premier que je sais, j'en ai tiré une partie de quelqu'un d'autre, mais je ne me souviens plus de qui. Désolé personne inconnue. Voici comment j'ai fait fonctionner "C ^ N" avec Perl. Voici mes commandes .vimrc.

" to use CTRL+N with modules for autocomplete "
set iskeyword+=:
set complete+=k~/.vim_extras/installed_modules.dat

Ensuite, j'ai configuré un cron pour créer le fichier installed_modules.dat. Le mien est pour mon système de mandriva. Ajuste en accord.

locate *.pm | grep "Perl5" | sed -e "s/\/usr\/lib\/Perl5\///" | sed -e "s/5.8.8\///" | sed -e "s/5.8.7\///" | sed -e "s/vendor_Perl\///" | sed -e "s/site_Perl\///" | sed -e "s/x86_64-linux\///" | sed -e "s/\//::/g" | sed -e "s/\.pm//" >/home/jeremy/.vim_extras/installed_modules.dat

Le second me permet d’utiliser gf en Perl. Gf est un raccourci vers d'autres fichiers. Il suffit de placer votre curseur sur le fichier et de taper gf pour ouvrir ce fichier.

" To use gf with Perl "
set path+=$PWD/**,
set path +=/usr/lib/Perl5/*,
set path+=/CompanyCode/*,   " directory containing work code "
autocmd BufRead *.p? set include=^use
autocmd BufRead *.pl set includeexpr=substitute(v:fname,'\\(.*\\)','\\1.pm','i')
1
J.J.

Je trouve les abréviations suivantes utiles

iab perlb  print "Content-type: text/html\n\n <p>zdebug + $_ + $' + $`  line ".__LINE__.__FILE__."\n";exit;
iab perlbb print "Content-type: text/html\n\n<p>zdebug  <C-R>a  line ".__LINE__.__FILE__."\n";exit;
iab perlbd do{print "Content-type: text/html\n\n<p>zdebug  <C-R>a  line ".__LINE__."\n";exit} if $_ =~ /\w\w/i;
iab perld print "Content-type: text/html\n\n dumper";use Data::Dumper;$Data::Dumper::Pad="<br>";print Dumper <C-R>a ;exit;

iab perlf foreach $line ( keys %ENV )<CR> {<CR> }<LEFT><LEFT>
iab perle while (($k,$v) = each %ENV) { print "<br>$k = $v\n"; }
iab perli x = (i<4) ? 4 : i;
iab perlif if ($i==1)<CR>{<CR>}<CR>else<CR>{<CR>}
iab perlh $html=<<___HTML___;<CR>___HTML___<CR>

Vous pouvez les faire en Perl uniquement avec

au bufenter *.pl iab xbug print "<p>zdebug ::: $_ :: $' :: $`  line ".__LINE__."\n";exit;
1
zzapper

Voici quelques-uns de mes paramètres .vimrc. Ils ne sont peut-être pas spécifiques à Perl, mais je ne pourrais pas travailler sans eux:

set nocompatible        " Use Vim defaults (much better!) "
set bs=2                " Allow backspacing over everything in insert mode "
set ai                  " Always set auto-indenting on "
set showmatch           " show matching brackets "

" for quick scripts, just open a new buffer and type '_perls' "
iab _perls #!/usr/bin/Perl<CR><BS><CR>use strict;<CR>use warnings;<CR>
1
innaM

.vimrc:

" Allow :make to run 'Perl -c' on the current buffer, jumping to 
" errors as appropriate
" My copy of vimparse: http://irc.peeron.com/~zigdon/misc/vimparse.pl

set makeprg=$HOME/bin/vimparse.pl\ -c\ %\ $*

" point at wherever you keep the output of pltags.pl, allowing use of ^-]
" to jump to function definitions.

set tags+=/path/to/tags
1
zigdon

Voici un module intéressant que j'ai trouvé le week-end: App::EditorTools::Vim . Sa caractéristique la plus intéressante semble être sa capacité à renommer les variables lexicales. Malheureusement, mes tests ont révélé que le produit ne semble pas encore prêt pour une utilisation en production, mais il semble intéressant de garder un œil sur lui.

1
innaM

De loin les plus utiles sont

  1. Perl filetype pluging (ftplugin) - cette couleur code différents éléments de code
  2. Créer une commande "W" de vérification de la syntaxe avant l'enregistrement, vous empêchant d'enregistrer du code incorrect (vous pouvez remplacer le "w" normal).

L'installation des plugins est un peu délicate car la version de vim (et linux) place les plugins à des endroits différents. Les miens sont dans ~/.vim/after /

mon .vimrc ci-dessous.

set vb
set ts=2
set sw=2
set enc=utf-8
set fileencoding=utf-8
set fileencodings=ucs-bom,utf8,prc
set guifont=Monaco:h11
set guifontwide=NSimsun:h12
set pastetoggle=<F3>
command -range=% -nargs=* Tidy <line1>,<line2>!
    \perltidy
filetype plugin on
augroup JumpCursorOnEdit
 au!
 autocmd BufReadPost *
 \ if expand("<afile>:p:h") !=? $TEMP |
 \ if line("'\"") > 1 && line("'\"") <= line("$") |
 \ let JumpCursorOnEdit_foo = line("'\"") |
 \ let b:doopenfold = 1 |
 \ if (foldlevel(JumpCursorOnEdit_foo) > foldlevel(JumpCursorOnEdit_foo - 1)) |
 \ let JumpCursorOnEdit_foo = JumpCursorOnEdit_foo - 1 |
 \ let b:doopenfold = 2 |
 \ endif |
 \ exe JumpCursorOnEdit_foo |
 \ endif |
 \ endif
 " Need to postpone using "zv" until after reading the modelines.
 autocmd BufWinEnter *
 \ if exists("b:doopenfold") |
 \ exe "normal zv" |
 \ if(b:doopenfold > 1) |
 \ exe "+".1 |
 \ endif |
 \ unlet b:doopenfold |
 \ endif
augroup END
0
Benno