Существует много тем, связанных с настройкой Vim/GVim для разработки Perl на PerlMonks.org. Моя цель в публикации этого вопроса - попытаться создать, насколько это возможно, идеальную конфигурацию для разработки Perl с помощью Vim/GVim. Пожалуйста, разместите свои предложения для настроек .vimrc
, а также полезных плагинов.
Я попытаюсь объединить рекомендации в набор параметров .vimrc
и список рекомендуемых плагинов, ftplugins и синтаксических файлов.
"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"
delimitMate обеспечивает автозаполнение для кавычек, парен, скобок и т.д. в режиме вставки. Он обрабатывает апострофы более разумно, чем closepairs.vim делает.
Я только что узнал о VimDebug. Мне еще не удалось установить его в Windows, но он выглядит многообещающим из описания.
Из хроматический блог (слегка адаптированный, чтобы иметь возможность использовать одно и то же отображение из всех режимов).
vmap ,pt :!perltidy<CR>
nmap ,pt :%! perltidy<CR>
нажмите ,pt
в нормальном режиме, чтобы очистить весь файл или в визуальном режиме, чтобы очистить выбор. Вы также можете добавить:
imap ,pt <ESC>:%! perltidy<CR>
Но использование команд из режима ввода не рекомендуется.
Энди Лестер и другие поддерживают официальные файлы поддержки Perl, Perl 6 и Pod для Vim on Github: https://github.com/vim-perl/vim-perl
Perl Best Practices имеет приложение на Конфигурации редактора. vim - первый редактор.
Посмотрите также perl-support.vim (Perl IDE для Vim/gVim). Поставляется с предложениями по настройке Vim (.vimrc), gVim (.gvimrc), ctags, perltidy и Devel: SmallProf рядом со многими другими вещами.
" 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>
Для упорядочивания я использую следующее: либо \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>
Я нахожу следующие аббревиатуры полезными
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;
my
; Я так понимаю, вы обычно пишете CGI без use strict;
правил use strict;
? (просто любопытно, если это так)
У меня есть 2.
Первое, что я знаю, я взял часть его от кого-то другого, но я не помню, кто. Извините, неизвестно. Здесь, как я сделал "C ^ N" автоматическую полную работу с Perl. Здесь мои команды .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
Второй позволяет мне использовать gf в Perl. 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')
Вот интересный модуль, который я нашел в выходные: App::EditorTools::Vim
. Его наиболее интересной особенностью является ее способность переименовывать лексические переменные. К сожалению, мои тесты показали, что он пока не готов для любого использования в производстве, но, похоже, стоит обратить внимание.
Вот пара моих настроек .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>
.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
Самыми полезными являются
Установка его плагинов немного затруднительна, так как версия vim (и linux) помещает плагины в разные места. Мои находятся в ~/.vim/after/
my.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