对于Perl开发的理想Vimconfiguration,你有什么build议?

有很多关于如何在PerlMonks.org上为Perl开发configurationVim / GVim的线程。 发表这个问题的目的是为了尽可能多地创build一个使用Vim / GVim进行Perl开发的理想configuration。 请发布您对.vimrc设置的build议以及有用的插件。

我将尝试将这些build议合并到一组.vimrc设置中,并将其推荐到插件,ftplugins和语法文件的列表中。

.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" 

句法

  • vim-perl:支持Vim中的Perl 5和Perl 6

插件

  • 在插入模式下,delimitMate提供了对引号,parens,括号等的自动完成 。 它处理撇号比closepairs.vim更聪明。

  • perlhelp.vim:与perldoc的接口

  • taglist.vim:源代码浏览器

ftplugins

  • perldoc.vim:来自vim的perldoc命令

CPAN模块

  • VIM :: X

debugging工具

我刚刚发现了关于VimDebug 。 我还没有能够安装在Windows上,但从描述看起来很有希望。

从色彩的博客 (稍微适应能够使用从所有模式相同的映射)。

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

点击,pt在普通模式下清理整个文件,或在视觉模式下清理select。 您还可以添加:

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

但是不推荐使用input模式的命令。

 " 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> 

另请参阅perl-support.vim (Vim / gVim的Perl IDE)。 与许多其他事情一起定制Vim(.vimrc),gVim(.gvimrc),ctags,perltidy和Devel:SmallProf的build议。

Perl Best Practices在编辑器configuration上有一个附录。 vim是列出的第一位编辑。

Andy Lester和其他人在Github上维护 Vim的官方Perl,Perl 6和Pod支持文件: https : //github.com/vim-perl/vim-perl

整理,我使用以下; 要么整理整个文件,要么在shift+V模式中select几行,然后执行\t

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

有时,对代码进行deparse也是有用的。 如上所述,无论是整个文件还是select。

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

.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 

这是我在周末发现的一个有趣的模块: App::EditorTools::Vim 。 它最有趣的function似乎是它重命名词法variables的能力。 不幸的是,我的testing表明,它似乎没有准备好任何生产使用,但它确实似乎值得留意。

这里有几个我的.vimrc设置。 他们可能不是Perl特定的,但是没有他们我就无法工作:

 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> 

我有2个。

我知道的第一个我从其他人那里拿到了一部分,但我不记得是谁。 抱歉,不知名的人 以下是我如何使用Perl自动完成“C ^ N”工作。 这是我的.vimrc命令。

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

然后我build立一个cron来创buildinstalled_modules.dat文件。 我的是mandriva系统。 相应地调整。

 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 

第二个允许我在Perl中使用gf。 Gf是其他文件的快捷方式。 只要将光标放在文件上并键入gf,它就会打开该文件。

 " 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') 

我发现以下缩写是有用的

 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 <CR>a line ".__LINE__.__FILE__."\n";exit; iab perlbd do{print "Content-type: text/html\n\n<p>zdebug <CR>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 <CR>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> 

你可以让他们perl只与

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

到目前为止,最有用的是

  1. Perl文件types插件(ftplugin) – 这种颜色编码各种代码元素
  2. 创build一个check-syntax-before-saving命令“W”来防止你保存错误的代码(你可以用正常的'w'来覆盖)。

由于vim(和linux)的版本把插件放在不同的地方,所以安装他插件有点儿麻烦。 我在〜/ .vim /之后/

我的.vimrc下面。

 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