Vim で clipborad 連携(Ubuntu 16.04)
Vim でヤンクした結果を他のアプリケーションでペーストできるようにします。
途中で詰まって色々調べたのでメモ代わりです。
環境
必要な設定
Vim で clipboard の機能が使えている必要があります。
vim --version |grep clipboard
-clipboard となっていれば clipboard の機能が無効になっています。
自分は apt で入れていた Vim で clipboard が使えなかったのでそちらは削除して vim-gtk を代わりにいれました。
この設定が有効になっていればビジュアルモードで "+y でヤンクした結果を cntl+v でペーストできます。
毎回 "+ とかを打つのはめんどくさいので .vimrc に set clipboard=unnamedplus を書いておいてあげると y でヤンクするだけで結果を cntl+v でペーストできるようになります。
補足
Vim で clipboard 連携する系の記事を検索すると set clipbaord=unnamed を設定するように書いてある記事が多いのですが、Ubuntu では動かないようです。
X Window System を採用している OS ではコピーしたものを格納する領域として PRIMARY と CLIPBOARD があります(SECONDARY という領域もありますがあまり使われないようです)
Vim にも * レジスタと + レジスタがあって * は PRIMARY 領域と + は CLIPBOARD を対応しています。
PRIMARY→*CLIPBOARD→+
ctrl+c, ctrl+v は CLIPBOARD 領域を利用しているため + レジスタにヤンクの結果が格納される必要があります。
+ レジスタに保存するためには unnamed ではなく unnamedplus が設定されていなければなりません。
注意点
自分はこれだけではうまく動かずはまってしまいました。
ヤンクした結果を terminal に貼ることができなかったので clipboard に入っていないものだと思っていたのですが、 どうやら vim で編集しているファイルを閉じたりバックグランドでの実行に移すタイミングでレジスタがクリアされていたようです。
参考:Prevent Vim from clearing the clipboard on exit - Stack Overflow
自分は解決策としては上の記事にあるように .vimrc に以下の設定をいれました。
autocmd VimLeave * call system("xsel -ib", getreg('+'))
autocmd VimLeave は vim 終了直前に発火するイベントです(autocmd - Vim日本語ドキュメント)
getreg('+') で +レジスタ の内容を読みだして CLIPBOARD 領域に書き込んでいます。
ubuntu 16.04 に docker を導入する
install するのは Docker CE です。
Get Docker for Ubuntu - Docker Documentation
公式 Document 通りに進めれば問題ないのですが、わからないことがいくつかあったのでメモしながら。
今回は Docker の repository からインストールします。
Docker repository のセットアップ
必要なツールをインストール
$ sudo apt-get install \ apt-transport-https \ ca-certificates \ curl \ software-properties-common
software-properties-common をインストールすると add-apt-repository が使えるようになります。
ちなみに file がどのパッケージに含まれているかは apt-file コマンドで確認できます。
$ apt-file search add-apt-repository
実行すると software-properties-common に含まれていることがわかります。
Docker の GPG の鍵を登録
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
curl で鍵をとってきて apt-key で管理します。
登録したら fingerprint が 9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88 と一致するか確認しておきます。
$ sudo apt-key fingerprint 0EBFCD88 pub 4096R/0EBFCD88 2017-02-22 Key fingerprint = 9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88 uid Docker Release (CE deb) <docker@docker.com> sub 4096R/F273FCD8 2017-02-22
repository の登録
$ sudo add-apt-repository \ "deb [arch=amd64] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) \ stable"
amd64 と armhf で別のリポジトリが用意されています。
arch コマンドで PC のアーキテクチャを調べてからインストールするほうを決めます。
ちなみに自分の PC では
$ arch x86_64
と表示されてどちらをとってくればいいかわからなかったのですが、amd64 は x86_64 を AMD 社がリブランドしたものらしいです。
参考:64 bit - what is the difference between x86_64 amd64 and 64 bit - Ask Ubuntu
Docker のインストール
$ sudo apt-get update $ sudo apt-get install docker-ce
$ sudo docker run hello-world
Hello from Docker! と表示されれば成功です。
インストール後の設定
non-root user で Docker を起動できるようにする
Docker の client は Unix ソケットを使って daemon と通信するのですが、ソケットファイルの読み書きは root にしかできません。
ただし、ファイルの所有グループが docker になっているためユーザをグループに追加すれば sudo なしで Docker を起動できるようになります。
$ sudo usermod -aG docker $USER
(-a がないと現在の所属グループから外されてしまいます)
グループに追加したあとは一旦ログアウトする必要があります。
また、この設定はセキュリティ上リスクもあるので注意が必要です。
リスクについては: docs.docker.com
これで一旦完了です。