NeoBundleの相対パスからVim pluginのURLをブラウザで開く
この記事はVim Advent Calendar 2012の217日目の記事です。
216日目はmanga_osyoさんによるVim のプラグインを作る時に注意すべきことや便利なプラグインでした。
NeoBundleの相対パスから、Vim pluginのURLを開く設定についてです。
小ネタです。
たまにはこんなVACでもいいと思うので、皆さんもっと気軽にVACに投稿すればいいと思います。
はじめに
先日行われたTokyoVimのあとのmomonga.vim時のvimrc読書会で、 自分が書いてるvimrcの設定をthincaさんとsupermomongaさんに見せたところ 便利。と同意を頂いたので小ネタですが、VACに書くことにしました。
どういう時に使うかというと人のvimrcを読んでいる時、つまりvimrc読書会で このVim pluginなんだろう?と思った時にさっとURL開けるので便利です。
ちなみに、vimrc読書会は毎週土曜日23時から やっていてどなたでも参加可能なので、是非参加して見ることをおすすめします。
NeoBundleの相対パスから、Vim pluginのURLを開く
以下の設定をvimrcに書いて、例えばNeoBundle 'deris/vim-rengbang'
と記載された行で、gz
とタイプすると
ブラウザでそのVim pluginのURL(この場合https://github.com/deris/vim-rengbang)をブラウザで開きます。
もしくは、visualモードでderis/vim-rengbang
の部分を選択してgz
とタイプしても開けます。
なお使用には、tyruさんが作られたopen-browser.vimを インストールしておく必要があります(NeoBundleでのインストールも一緒に下の設定に書いてます。)
NeoBundle 'tyru/open-browser' nnoremap gz vi':<C-u>call ExecuteWithSelectedText('OpenBrowser https://github.com/%s')<CR> vnoremap gz :<C-u>call ExecuteWithSelectedText('OpenBrowser https://github.com/%s')<CR> " visualモードで最後に選択したテキストを%sで指定してコマンドを実行する {{{ function! ExecuteWithSelectedText(command) if a:command !~? '%s' return endif let reg = '"' let [save_reg, save_type] = [getreg(reg), getregtype(reg)] normal! gvy let selectedText = @" call setreg(reg, save_reg, save_type) if selectedText == '' return endif execute printf(a:command, selectedText) endfunction " }}}
私のvimrcからほぼそのまま持ってきたものです。
normal modeの方は、vi'で相対パスを選択しているので、相対パスの文字列部分を ""でくくっている方はvi"のように適宜修正するか、visualモードで選択して開いてください。
ここまで書いてて、ちょっと汎用的じゃないなぁと思ったので、operator-user対応しました。
使用にはkanaさんが作られたoperator-userを
インストールしておく必要があります(NeoBundleでのインストールも一緒に下の設定に書いてます。)
NeoBundle 'tyru/open-browser' NeoBundle 'kana/vim-operator-user' call operator#user#define('open-neobundlepath', 'OpenNeoBundlePath') map gz <Plug>(operator-open-neobundlepath) function! OpenNeoBundlePath(motion_wise) if line("'[") != line("']") return endif let start = col("'[") - 1 let end = col("']") let sel = strpart(getline('.'), start, end - start) let sel = substitute(sel, '^\%(github\|gh\|git@github\.com\):\(.\+\)', 'https://github.com/\1', '') let sel = substitute(sel, '^\%(bitbucket\|bb\):\(.\+\)', 'https://bitbucket.org/\1', '') let sel = substitute(sel, '^gist:\(.\+\)', 'https://gist.github.com/\1', '') let sel = substitute(sel, '^git://', 'https://', '') if sel =~ '^https\?://' call openbrowser#open(sel) elseif sel =~ '/' call openbrowser#open('https://github.com/'.sel) else call openbrowser#open('https://github.com/vim-scripts/'.sel) endif endfunction
gz
にkey mappingしているので、normalモードでgz
とタイプし、
textobjects(i'
,iw
とか)を入力するか、visualモードで選択したあとgz
と
タイプすることで、NeoBundleの相対パスからURLを開くことができます。
この設定では、最初の設定と比較して、http://~
,https://~
,git://~
のパス、
およびNeoBundleのgithub:~
,bitbucket:~
,gist:~
形式のパス、
www.vim.orgにあるVim pluginをホストしているhttps://github.com/vim-scripts
のパス(NeoBundle 'project.tar.gz'
とか)もURLで開くことができます。
operator-user対応したことで、若干タイプ数は増えましたが、大分汎用的になりました。
まとめ
以上が、NeoBundleの相対パスから、Vim pluginのURLを開く設定についてでした。
今回ご紹介した設定は、vimrc読書会に参加する上で便利な設定なので、本設定をした上で是非ご参加ください。毎週土曜日23時からやってます。
それではVim Advent Calendar 2012の217日目を終わります。
明日のVim Advent Calendar 2012はKSuzukiiiさんです。