E127 がとれない.

vim-pukiwiki で E127 がとれないで困っています. vim のバグのようなにおいしかしないのですが対応方法も含めて正しいのか,よくわからずにいます.


以下の条件 でE127 が発生します.

  1. ":set filetype=pukiwiki_edit" でファイルタイプを変更する.
  2. "ftplugin/pukiwiki_edit.vim" 内で ":setlocal filetype=pukiwiki_edit" を呼び出す関数を実行する.


以下のような plugin/*.vim の関数では E127 は発生しません.

" これはエラーにならない
function! PW_setfiletype_ok() " {{{
	execute ":setlocal filetype=pukiwiki_edit"
endfunction "}}}
https://github.com/syngan/vim-pukiwiki/blob/master/plugin/pukiwiki.vim

それに対し, ftplugin/*.vim の関数ではエラーになります.

" これはエラーになる
function! PW_setfiletype_ng() " {{{
	execute ":setlocal filetype=pukiwiki_edit"
endfunction "}}}
https://github.com/syngan/vim-pukiwiki/blob/master/ftplugin/pukiwiki_edit.vim

おそらくオリジナル版 ftplugin 配下だとエラーになってしまうので, "if !exists" でチェックしているのだと思います。

if !exists('*s:PW_show_recent')"{{{
function! s:PW_show_recent()
let url = b:url . '?RecentChanges'
https://github.com/syngan/vim-pukiwiki/blob/a3db45aa4b5b8cc0373756e1e38352ffeb33ec02/ftplugin/pukiwiki_edit.vim

ですが、これだとソース修正のたびに vim を立ち上げなおす必要があるので、以下のように対応しています。

try
function! PW_fileupload() range "{{{
   ......
endfunction "}}}
catch /^Vim\%((\a\+)\)\?:E127/
endtry
https://github.com/syngan/vim-pukiwiki/blob/master/ftplugin/pukiwiki_edit.vim