あなたの天然記念物
ホーム更新雑談Perl鉄ゲタランドナーコースガイド自転車Linuxリンク経歴連絡先

VimでPerlを扱うプラグイン (2015.10.18)

背景

Perlのソースを書いていて、Lint後に即実行したくなったのでプラグインを作りました。
今まで「:w」→「:!perl -MO=Lint %」→「:!perl %」を履歴から探してましたが、最近はそれすら面倒になってきました(笑)
【注意】元々VimのプラグインにPerl用のがあるので、それが上手く動作する人には不要だと思います。vim compiler perl - Google 検索

仕様

Perlソースを書き込むと同時にLintが走り、Perlを実行できる場合は確認メッセージでOKをクリック(スペースバー可)で実行します。
実行できないエラーがあればVimに戻ります。

pluginフォルダ

ファイルperllintrun.vimを作ります。
" PerlをLintして実行
" Version: 1.0
" Author: yrntrlmnmnt <@yrntrlmnmnt>
" License: VIM LICENSE

if exists('g:loaded_perllintrun')
	finish
endif
let g:loaded_perllintrun = 1

let s:save_cpo = &cpo
set cpo&vim

:scriptencoding utf8

command! -bar PerlLintRun call perllintrun#perllintrun()

let &cpo = s:save_cpo
unlet s:save_cpo

autoloadフォルダ

ファイルperllintrun.vimを作ります。
" PerlをLintして実行
" Version: 1.0
" Author: yrntrlmnmnt <@yrntrlmnmnt>
" License: VIM LICENSE

let s:save_cpo = &cpo
set cpo&vim

scriptencoding utf8

" Lintと実行

function! perllintrun#lintrun()
	execute '!perl -MO=Lint %'
	if !v:shell_error
		let choice = confirm("Lintが成功しました。実行しますか?", "(&y)はい\n(&n)いいえ", 1, "Question")
		if 1 == choice
			execute '!perl %'
		endif
	endif
endfunction

" プラグイン使用開始

function! perllintrun#perllintrun()
	command! -bar PLR call perllintrun#lintrun()

	augroup perllintrun#Preview
		autocmd!
		autocmd BufWritePost *.pl call perllintrun#lintrun()
		autocmd BufWritePost *.pm call perllintrun#lintrun()
	augroup END
endfunction

let &cpo = s:save_cpo
unlet s:save_cpo

使い方

Vimを起動後、「:PerlLintRun」を実行すると有効になります。
ソースを書き替えずに再実行する場合は「:PLR(Perl Lint Runの略)」です。

参考書

この本で勉強しました。
書籍案内:Vim scriptテクニックバイブル ~Vim使いの魔法の杖