对于Perl开发的理想Vim配置,您有什么建议?

时间:2009-10-15 17:13:11

标签: perl vim configuration

有许多线程与如何为Perl开发Vim/GVim配置on PerlMonks.org有关。我发布这个问题的目的是尽可能地使用Vim / GVim为Perl开发创建一个理想的配置。请发布您对.vimrc设置以及有用插件的建议。

我将尝试将建议合并到一组.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"

语法

插件

ftplugins

CPAN模块

调试工具

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

12 个答案:

答案 0 :(得分:4)

来自chromatic's blog(略微适应能够使用所有模式的相同映射)。

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

在正常模式下点击,pt以清理整个文件,或以可视模式点击以清除选择。您还可以添加:

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

但不推荐使用输入模式的命令。

答案 1 :(得分:3)

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

答案 2 :(得分:3)

另请参阅perl-support.vim(Vim / gVim的Perl IDE)。 附带定制Vim(.vimrc),gVim(.gvimrc)的建议, ctags,perltidy和Devel:SmallProf除了许多其他东西。

答案 3 :(得分:3)

Perl Best PracticesEditor Configurations上有一个附录。 vim是第一个列出的编辑器。

答案 4 :(得分:3)

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

答案 5 :(得分:2)

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

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

有时它对解析代码也很有用。如上所述,可以是整个文件,也可以是选择。

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

答案 6 :(得分:1)

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

答案 7 :(得分:1)

以下是我的几个.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>

答案 8 :(得分:1)

这是我周末发现的一个有趣模块:App::EditorTools::Vim。它最有趣的功能似乎是它能够重命名词法变量。不幸的是,我的测试显示它似乎尚未准备好用于任何生产用途,但它确实值得关注。

答案 9 :(得分:1)

我有2个。

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

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

然后我设置了一个cron来创建installed_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')

答案 10 :(得分:1)

我发现以下缩写很有用

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>

您只能使用

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

答案 11 :(得分:0)

到目前为止最有用的是

  1. Perl文件类型插件(ftplugin) - 此颜色编码各种代码 元素
  2. 创建check-syntax-before-saving命令“W” 阻止你保存坏代码(你可以用普通的'w'覆盖)。
  3. 安装他的插件有点不对劲,因为vim(和linux)的版本将插件放在不同的地方。我的是〜/ .vim / after /

    我的.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