クラウドワークス エンジニアブログ

日本最大級のクラウドソーシング「クラウドワークス」の開発の裏側をお届けするエンジニアブログ

Macでvim-fugitiveのGbrowseが動くまで

こんにちは。

クラウドソーシングで最大手のクラウドワークスでエンジニアをやっています、KIMIです。

つい先日少し時間ができたので、以前から動かなくて困っていた vim-fugitive のGbrowse コマンドを調査して動くようにした時のログなんかを書きたいと思います。

Gbrowse とは、現在開いているファイルをGitHubのURLにしてブラウザで開いてくれるコマンドです。slack にURLを貼り付けるときに便利そうです。

しかし、Mac のデフォルトのvim (/usr/bin/vim)では動かないので、fugitive.vim のソースを見ていきます。

github.com

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 になることがわかりました。

vi.stackexchange.com

なので、最新の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!もできるようになりました。

結果として

Macではかならずvim を入れなおしましょう。

We're hiring!

私たちはお寿司を食べながらカジュアルにお話してくれるエンジニアを募集しています。

www.wantedly.com

© 2016 CrowdWorks, Inc., All rights reserved.