はじめに
昔のCygwinのVimではクリップボードが利用できず,Cygwinで用意されているクリップボードデバイス /dev/clipboard
に対し,読み書きを行うことや, getclip
, putclip
コマンドを利用することで,クリップボードとのやりとりを行っていた.
kanaさんのkana/vim-fakeclipというプラグインは,Cygwinや他の環境で +clipboard
でないVimであっても,外部コマンドなどを用いることによって,クリップボードを何とか利用しようというものであり,かつてのCygwinのVimユーザーは,よくこのプラグインを利用していたことだろう.
しかし,Vim 7.3.836以降,k_takataさんにより,CygwinのVimでもクリップボード機能が利用できるようになった.
最近では,Cygwinにデフォルトで付属しているVimであっても,クリップボード機能を有効にしてビルドされており,利用することができる.
だが,僕がCygwinでVimを自前ビルドしたとき, +clipboard
となっているのに,クリップボードが利用できなかった.
この記事では,そのときにハマったことと,どう解決したかについて述べる.
長い前書きになったが,内容としては「こうやっただけ」というしょうもないものである.
結論を先に言うと, configure
に --enable-gui=no
と --without-x
を指定しただけである.
CygwinでVimをビルドする
最近では,VimのソースコードはGitHubで管理されているようになっているので,GitHubからソースを落としてくる.
$ git clone https://github.com/vim/vim.git
リポジトリのルートディレクトリに configure
が用意されているので,多くのソフトウェアと同じく,
$ ./configure
$ make
$ make install
の順で実行するとよい.
configure
については,適当に情報を収集し,以下のようにオプションを追加し,ビルドした.
$ ./configure \ --prefix=/usr/local/ \ --enable-fail-if-missing \ --enable-gui=yes \ --enable-multibyte=yes \ --enable-perlinterp=yes \ --enable-pythoninterp=yes \ --enable-rubyinterp=yes \ --enable-tclinterp=yes \ --enable-luainterp=yes \ --enable-cscope=yes \ --enable-gpm \ --enable-cscope \ --enable-fontset \ --with-features=huge \ --with-x \ --with-compiledby=koturn && \ make -j5 && \ make install
しかし,この設定では +clipboard
となったが,クリップボードが利用できなかった.
そのときに,ざっと調べたときに見た情報から, --with-x
や --enable-gui=yes
が余計なのではないかと思った.
そこで,--with-x
の代わりに --without-x
を, --enable-gui=yes
の代わりに --enable-gui=no
を指定して,再度 configure
を行いビルドした(1度 configure
を行った場合, rm src/auto/config.cache
をしておく必要がある).
$ ./configure \ --prefix=/usr/local/ \ --enable-fail-if-missing \ --enable-gui=no \ --enable-multibyte=yes \ --enable-perlinterp=yes \ --enable-pythoninterp=yes \ --enable-rubyinterp=yes \ --enable-tclinterp=yes \ --enable-luainterp=yes \ --enable-cscope=yes \ --enable-gpm \ --enable-cscope \ --enable-fontset \ --with-features=huge \ --without-x \ --with-compiledby=koturn && \ make -j5 && \ make install
これで自前ビルドのCygwinのVimであっても,クリップボード機能が利用可能となった.
明示的に --without-x
, --enable-gui=no
を指定しなかった場合でも,クリップボードが有効にならなかったので,ちゃんと指定しなくてはならない.
余談
CFLAGS
や LDFLAGS
に,自分なりの最適化オプションを追加してもビルドできるか?ということが気になったので,
$ ./configure \ --prefix=/usr/local/ \ --enable-fail-if-missing \ --enable-gui=no \ --enable-multibyte=yes \ --enable-perlinterp=yes \ --enable-pythoninterp=yes \ --enable-rubyinterp=yes \ --enable-tclinterp=yes \ --enable-luainterp=yes \ --enable-cscope=yes \ --enable-gpm \ --enable-cscope \ --enable-fontset \ --with-features=huge \ --without-x \ --with-compiledby=koturn \ CFLAGS='-Ofast -m64 -march=native -mtune=native -flto -funroll-loops -DNDEBUG' \ LDFLAGS='-flto' && \ make -j5 && \ make install
としてビルドしてみた.
しかし,-flto
が何かの悪さをしているらしく,出来上がったバイナリを実行すると,Vimが立ち上がった瞬間にエラーが出た.
-flto
を外すと,エラー無く,無事に実行できた.
まとめ
CygwinのVimは configure
に --enable-gui=no --without-x
を指定しないと,クリップボードが有効にならない.