unite.vim で set_substitute_pattern がなくなった件について


このメソッドがなくなったのは結構インパクトがあったみたいで、一日にして更新されてこの記事も必要なくなってしまいました。せっかくなので残しておきますが、こちらの解決法がずっとスマートです。

Unite をアップデートすると今まで使ってた設定でエラーが出るようになってしまいました。調べてみると、deprecated な(?)一部のメソッドが削除されてしまったようです。

せっかくだから、俺はこの Unite + vim-ref を選ぶぜ! | blog.delphinus.dev
https://blog.delphinus.dev/2010/12/vim-ref-with-unite.html

上記記事に書いた以下の部分を、

" 様々なショートカット
call unite#set_substitute_pattern('file', '\$\w\+', '\=eval(submatch(0))', 200)
call unite#set_substitute_pattern('file', '^@@', '\=fnamemodify(expand("#"), ":p:h")."/"', 2)
call unite#set_substitute_pattern('file', '^@', '\=getcwd()."/*"', 1)
call unite#set_substitute_pattern('file', '^;r', '\=$VIMRUNTIME."/"')
call unite#set_substitute_pattern('file', '^\~', escape($HOME, '\'), -2)
call unite#set_substitute_pattern('file', '\\\@<! ', '\\ ', -20)
call unite#set_substitute_pattern('file', '\\ \@!', '/', -30)
 
if has('win32') || has('win64')
    call unite#set_substitute_pattern('file', '^;p', 'C:/Program Files/')
    call unite#set_substitute_pattern('file', '^;v', '~/vimfiles/')
else
    call unite#set_substitute_pattern('file', '^;v', '~/.vim/')
endif

以下のように修正してください。

" 様々なショートカット
call unite#custom#profile('files', 'substitute_patterns', {
            \ 'pattern': '\$\w\+',
            \ 'subst': '\=eval(submatch(0))',
            \ 'priority': 200,
            \ })
call unite#custom#profile('files', 'substitute_patterns', {
            \ 'pattern': '^@@',
            \ 'subst': '\=fnamemodify(expand("#"), ":p:h")."/"',
            \ 'priority': 2,
            \ })
call unite#custom#profile('files', 'substitute_patterns', {
            \ 'pattern': '^@',
            \ 'subst': '\=getcwd()."/*"',
            \ 'priority': 1,
            \ })
call unite#custom#profile('files', 'substitute_patterns', {
            \ 'pattern': '^;r',
            \ 'subst': '\=$VIMRUNTIME."/"',
            \ 'priority': 1,
            \ })
"call unite#custom#profile('files', 'substitute_patterns', {
"            \ 'pattern': '^\~',
"            \ 'subst': escape($HOME, '\'),
"            \ 'priority': -2,
"            \ })
call unite#custom#profile('files', 'substitute_patterns', {
            \ 'pattern': '\\\@<! ',
            \ 'subst': '\\ ',
            \ 'priority': -20,
            \ })
call unite#custom#profile('files', 'substitute_patterns', {
            \ 'pattern': '\\ \@!',
            \ 'subst': '/',
            \ 'priority': -30,
            \ })
if has('win32') || has('win64')
    call unite#custom#profile('files', 'substitute_patterns', {
                \ 'pattern': '^;p',
                \ 'subst': 'C:/Program Files/',
                \ 'priority': 1,
                \ })
    call unite#custom#profile('files', 'substitute_patterns', {
                \ 'pattern': '^;v',
                \ 'subst': '~/vimfiles/',
                \ 'priority': 1,
                \ })
else
    call unite#custom#profile('files', 'substitute_patterns', {
                \ 'pattern': '^;v',
                \ 'subst': '~/.vim/',
                \ 'priority': 1,
                \ })
endif

定義済のショートカット(ハイライトした部分)を定義しようとするとエラーが出てしまいましたが、最新版では修正されています

One thought on “unite.vim で set_substitute_pattern がなくなった件について

  1. Pingback: 【unite.vim】set_substitute_pattern は衰退しました(その2) | blog.delphinus.dev

コメントを残す