📝

vim-fugitive で :Gbowse! ができない時の対処法

2023/09/07に公開

vim で編集しているときに、github のリンクが欲しくなることはよくあると思います。vim-fugitive + vim-rhubar で簡単に実現できるはずだったのですが、少してこずったので、メモ代わりに残しておきます。自分は vim を普段使っているものの、plugin の作成などはしたことないという意味で初心者です。

ちなみに、環境は WSL です。

まず、https://github.com/tpope/vim-fugitive/issues/1053 にあるように、plugin を追加しコマンドを設定しました。

...
Plug 'tpope/vim-rhubarb'
Plug 'airblade/vim-gitgutter'
call plug#end()

" for vim-fugitive
nnoremap <Leader>gy :.GBrowse!<CR>
vnoremap <Leader>gy :.GBrowse!<CR>

よし、これで終わりと思いきや、あれ、ctrl-v しても copy できていません。

$ xclip -selection c -o

あれ。

ちょっとなんもわからんとなったので、とりあえず、fugitive のコードをみてみました。おそらく、ここで clipboard に url をコピーしてそうです。
https://github.com/tpope/vim-fugitive/blob/572c8510123cbde02e8a1dafcd376c98e1e13f43/autoload/fugitive.vim#L7341-L7344

ということは、そもそも @+ = url の部分が実行されていないのか?という予測のもと、:echo has('clipboard') を実行すると 0 が返ってきます。あ!

$ vim --version | grep clipboard
-clipboard         +keymap            +printer           +vertsplit
+eval              -mouse_jsbterm     -sun_workshop      -xterm_clipboard

なるほど、そもそも clipboard に対応してない vim を使っていたようです。(WSL の default の vim は -clipboard のようです)

+clipboard となるよう、以下のコマンドを実行します。

$ sudo apt-get install vim-gtk3 -y

すると、

$ vim --version | grep clipboard
+clipboard         +keymap            +printer           +vertsplit
+eval              -mouse_jsbterm     -sun_workshop      +xterm_clipboard

よさそう。

適当な file を開いて、GBrowse! すると

$ xclip -selection c -o
https://github.com/uchiiii/xxxxxxxxxxx.rs#L3-L6

めでたしめでたし。

補足

コードを読んでいるうちに、vim で コマンド作る際に、command! のように ! を後につけて挙動を変えたいときは、以下のようにすればいいことを学びました。
https://vi.stackexchange.com/a/13967

https://github.com/tpope/vim-fugitive/blob/572c8510123cbde02e8a1dafcd376c98e1e13f43/plugin/fugitive.vim#L632

Discussion