VimでPerl(に限らないけど)を書くときにこれだけはやってほしい設定

  • 110
    いいね
  • 1
    コメント
この記事は最終更新日から1年以上が経過しています。

他におすすめあれば教えてください。Perl始めたてな人に教えたいのに加えて、叩き台にして識者の意見をもらいたいという意味でも書いています。

1. 下準備

まずはプラグイン管理ツールVundleを導入する

Vundleをダウンロード

$ cd ~/.vim
$ git clone git://github.com/gmarik/vundle.git vundle

.vimrc にこのように記述

.vimrc
filetype plugin on

" vundleを使うためのおまじない
set rtp+=~/.vim/vundle/
call vundle#rc('~/.vim/bundle')

" 使うプラグインを指定
Bundle 'petdance/vim-perl'
Bundle 'hotchpotch/perldoc-vim'
Bundle 'Shougo/neocomplcache'
Bundle 'Shougo/neocomplcache-snippets-complete'
Bundle 'thinca/vim-quickrun'

Bundle 'plugin name' で書いたプラグインをローカルにダウンロード

vimを開きなおして :BundleInstall と打てばダウンロードが走る。

~/.vim/bundle 以下にちゃんとインストールされていることを確認。

$ ls ~/.vim/bundle/
vim-perl/
perldoc-vim/
neocomplcache/
neocomplcache-snippets-complete/
vim-quickrun/

2. 補完の設定をする

先ほど入れた neocomplcache というプラグインで補完をするためにいろいろ設定。

.vimrc にこのように書く。とりあえず動く。カスタマイズしたい人はドキュメント ~/.vim/bundle/neocomplcache/README.md を読めばいろいろ分かる。

.vimrc
" Disable AutoComplPop.
let g:acp_enableAtStartup = 0
" Use neocomplcache.
let g:neocomplcache_enable_at_startup = 1
" Use underbar completion.
let g:neocomplcache_enable_underbar_completion = 1
" Set minimum syntax keyword length.
let g:neocomplcache_min_syntax_length = 3
let g:neocomplcache_lock_buffer_name_pattern = '\*ku\*'

 " Use smartcase.
let g:neocomplcache_enable_smart_case = 1
" Use camel case completion.
let g:neocomplcache_enable_camel_case_completion = 1
" Select with <TAB>
inoremap <expr><TAB> pumvisible() ? "\<C-n>" : "\<TAB>"

let g:neocomplcache_ctags_arguments_list = {
  \ 'perl' : '-R -h ".pm"'
  \ }

let g:neocomplcache_snippets_dir = "~/.vim/snippets"
" Define dictionary.
let g:neocomplcache_dictionary_filetype_lists = {
    \ 'default'    : '',
    \ 'perl'       : $HOME . '/.vim/dict/perl.dict'
    \ }

" Define keyword.
if !exists('g:neocomplcache_keyword_patterns')
  let g:neocomplcache_keyword_patterns = {}
endif
let g:neocomplcache_keyword_patterns['default'] = '\h\w*'

" for snippets
imap <expr><C-k> neocomplcache#sources#snippets_complete#expandable() ? "\<Plug>(neocomplcache_snippets_expand)" : "\<C-n>"
smap <C-k> <Plug>(neocomplcache_snippets_expand)

辞書ファイルを入れる

Perlの辞書ファイルを入れる。これでPerlの組み込み関数や構文で使う単語はすべて補完してくれるようになる。

$ mkdir ~/.vim/dict
$ cd ~/.vim/dict
$ wget https://raw.github.com/Cside/dotfiles/master/.vim/dict/perl.dict

コードスニペットを作る

よく使うイディオム(?)を毎回すべて打つのはDRYに反するのでスニペットして登録してしまう。

$ mkdir ~/.vim/snippets
$ cd ~/.vim/snippets
$ wget https://raw.github.com/gist/2146105/464170751812997fc3b655cb547e2b5a929e9eb6/perl.snip

スニペットを呼び出す

上で登録したスニペットのひとつを試しに呼び出してみる。Vimを開き直した後で、インサートモードで u と打った後に Ctrl + k すると、

    #!/usr/bin/env perl
    use 5.10.0;
    use strict;
    use warnings;

がinsertされる。

ほかにどのようなスニペットが使えるかは vim ~/.vim/snippets/perl.snip で確認してみる。そして必要に応じてガンガン自分で作っていく。

保存時にシンタックスエラーを検知するように

実行エラーになったとき、エラーメッセージの行数を確認してソースコードの該当行を探して…というのは人間の目でやるのは馬鹿げてますね。エラーを吐いている行を勝手に教えて欲しいもんです。

そこで Errormaerker.vim というのを使う。

$ sudo cpanm Project::Libs
$ cd ~/.vim
$ wget https://raw.github.com/Cside/dotfiles/master/.vim/vimparse.pl
$ chmod +x vimparse.pl
$ mkdir -p ftplugin/perl
$ cd ftplugin/perl
$ wget https://raw.github.com/Cside/dotfiles/master/.vim/ftplugin/perl/flyquickfixmake.vim

Vimで適当なPerlファイルを開き、わざとシンタックスエラーなプログラムを書いて保存してみる。エラー行にカーソルがフォーカスされるのを確認する。

3. その他のプラグインの解説

やべえ書くの飽きてきたw 後少しだ頑張れ俺www

ここで使い方を解説するのはすべて先ほど入れたやつ。

perldoc-vim

Vimの中でperldocを引ける。

Perlプログラムの中で、モジュール名(LWP::UserAgent みたいな)にカーソルをフォーカスした後 Shift + k すると、ウィンドウがもうひとつ開いて POD が表示される。

quickrun.vim

編集->vimを抜けてコンソールで実行->シンタックスエラー->vimにもどって修正->vimを抜けてコンソールで実行->シンタックスエラー…と、Vimとコンソールを行ったり来たりするのはタイムロス。Vimの中でスクリプトを実行したい。

編集しているスクリプトをその場で実行できる。いちいちvimを抜けて $ perl script.pl する必要がなくなる。

.vimrc でキーバインドを設定する。僕は \ + r にしている。

.vimrc
nmap <Leader>r <plug>(quickrun)

これで、Perlスクリプトを編集中に \ + r するとその場で実行される。

4. オマケ

$ とか @ をうつのだるい。指を遠くまでのばしたくない

.vimrc
inoremap <C-d> $
inoremap <C-a> @

で Ctrl + d をドル、 Ctrl + a をアットにしている。

.psgi とか .t も Perlなシンタックスハイライトをしてほしい

.vimrc
autocmd BufNewFile,BufRead *.psgi   set filetype=perl
autocmd BufNewFile,BufRead *.t      set filetype=perl

ほかにおすすめなプラグイン

☆:unite.vim, align.vim
◎:surroound.vim, unite-outline, eregex.vim

詳しくはぐぐってw

5. More?