Be a Engineer.

社会人からWEBエンジニアになった人間の備忘録的勉強記録

Vagrant+tmux環境下でvimのヤンクデータを共有する

はじめに

vagrant仮想環境で開発を進めているときにめっちゃイラッとすることが2つある。(※自分はMacとiTerm2を使っています。)

  1. 仮想環境下で新しいウィンドウを開くとssh接続が切れてローカルから再スタート
  2. Vimでヤンクしたコードが他のvimウィンドウでペーストできない

1に関してはtmuxを使うことによって回避できているが、2に関しては今までどうすることもできなかった。(調べても記事が無い)

なので、この2に関して力技でなんとかしてみた。

viminfoを使う

viminfoとはコマンド、検索履歴、レジスタなどの情報が格納されているファイルで、通常ホームディレクトリ以下に「.viminfo」の形で存在している。
※わかりやすい解説はこちら

このviminfoにレジスタのデータが書かれており、

# ヤンクした後に
:wv

# 別タブのvimで
:rv!

とすることによって、ヤンクしたデータを複数ウィンドウ間で共有することができる。
これを利用して、ヤンクすると自動的に:wvを実行し、ペーストすると自動的に先に:rv!を実行させることで、わざわざコマンドを叩く事なく、軽快なヤンク+ペーストをさせることができる。

以下を.vimrcに記述する。

"Linuxの場合はviminfoを用いてヤンクデータを共有
let OSTYPE = system('uname')
if OSTYPE == "Linux\n"
    noremap y y:wv<CR>
    noremap p :rv!<CR>p
endif

set viminfo='50,\"3000,:0,n~/.viminfo

基本的にMacのローカル環境は共有できている前提で、今回はOSがLinuxの時のみ有効にさせたが、ローカルでも同じことがしたい場合はif内を書いておけば良い。

またset以下はviminfoの設定で、何行までヤンクしたデータを保存するのかを決めている。
こちらの記事を参照したほうがわかりやすいので詳細については今回は割愛する。