Help us understand the problem. What is going on with this article?

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

More than 5 years have passed since last update.

他におすすめあれば教えてください。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?

Cside
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした