こんにちは。
クラウドソーシングで最大手のクラウドワークスでエンジニアをやっています、KIMIです。
つい先日少し時間ができたので、以前から動かなくて困っていた vim-fugitive のGbrowse コマンドを調査して動くようにした時のログなんかを書きたいと思います。
Gbrowse とは、現在開いているファイルをGitHubのURLにしてブラウザで開いてくれるコマンドです。slack にURLを貼り付けるときに便利そうです。
しかし、Mac のデフォルトのvim (/usr/bin/vim)では動かないので、fugitive.vim のソースを見ていきます。
Gbrowseを動かす
Gbrowse あたりのコード
if a:bang if has('clipboard') let @* = url endif return 'echomsg '.string(url) elseif exists(':Browse') == 2 return 'echomsg '.string(url).'|Browse '.url else if !exists('g:loaded_netrw') runtime! autoload/netrw.vim endif if exists('*netrw#BrowseX') return 'echomsg '.string(url).'|call netrw#BrowseX('.string(url).', 0)' else return 'echomsg '.string(url).'|call netrw#NetrwBrowseX('.string(url).', 0)' endif endif
:Browse コマンドは入っていないので、netrw でブラウザを開こうとしているようです。ということで、netrw プラグインを見に行きます。デフォルトのままであれば、/usr/share/vim/vimXX/autoload/netrw.vim にあると思います。(XX はヴァージョンによって読み替えてください)
netrw.vim を読み進めると、
fun! netrw#NetrwBrowseX(fname,remote) ... if exists("g:netrw_browsex_viewer") && g:netrw_browsex_viewer == '-' ... elseif has("macunix") && executable("open") ...
とあって、g:netrw_browsex_viewer
を 宣言していないことから、macunix
だし、ターミナルで open 'http://google.com'
も動くことですし、大丈夫なはずだぞ…?
とりあえず試しに、vimrc に
let g:netrw_browsex_viewer = 'open'
と書いてみると、無事 :Gbrowse
が動きました。目的は達成したのでこれでいいのですが、ブログが短すぎるのでもう少し深掘りしていきます。
デフォルトでも動きそうだけど?
少し調べてみると、デフォルトの/usr/bin/vim は has('macunix')
がfalse
になることがわかりました。
なので、最新のvim を入れてあげるだけでいいようです。
brew update brew install vim hash -r vim
びっくりするぐらい簡単だったので、もう少しがんばって書きます。
Gbrowse!
Gbrowse のソースを読んでいて bang があることに気づきました。
if a:bang if has('clipboard') let @* = url endif return 'echomsg '.string(url) ...
の部分です。clipboard
にurl を入れつつ、echomsg
をしてくれるようです。「slack にURLを貼り付ける。」でいうと、むしろこれだけで良さそうです。しかし、ここでもデフォルトの/usr/bin/vim は動作しません。clipboard
が有効になっていないためです。
$ /usr/bin/vim --version | grep clipboard -clientserver -clipboard +cmdline_compl +cmdline_hist +cmdline_info +comments -xterm_clipboard -xterm_save
なので、最新のvim を入れます。
$ /usr/local/bin/vim --version | grep clipboard +clipboard +insert_expand +perl +vertsplit -ebcdic +mouse -sniff -xterm_clipboard
無事、Gbrowse!もできるようになりました。
結果として
We're hiring!
私たちはお寿司を食べながらカジュアルにお話してくれるエンジニアを募集しています。