Vim で clipborad 連携(Ubuntu 16.04)

Vim でヤンクした結果を他のアプリケーションでペーストできるようにします。

途中で詰まって色々調べたのでメモ代わりです。

環境

必要な設定

Vim で clipboard の機能が使えている必要があります。

vim --version |grep clipboard

-clipboard となっていれば clipboard の機能が無効になっています。

自分は apt で入れていた Vim で clipboard が使えなかったのでそちらは削除して vim-gtk を代わりにいれました。

この設定が有効になっていればビジュアルモードで "+y でヤンクした結果を cntl+v でペーストできます。

毎回 "+ とかを打つのはめんどくさいので .vimrcset clipboard=unnamedplus を書いておいてあげると y でヤンクするだけで結果を cntl+v でペーストできるようになります。

補足

Vim で clipboard 連携する系の記事を検索すると set clipbaord=unnamed を設定するように書いてある記事が多いのですが、Ubuntu では動かないようです。

X Window System を採用している OS ではコピーしたものを格納する領域として PRIMARYCLIPBOARD があります(SECONDARY という領域もありますがあまり使われないようです)

Vim にも * レジスタ+ レジスタがあって *PRIMARY 領域と +CLIPBOARD を対応しています。

  • PRIMARY*
  • CLIPBOARD+

ctrl+c, ctrl+vCLIPBOARD 領域を利用しているため + レジスタにヤンクの結果が格納される必要があります。

+ レジスタに保存するためには unnamed ではなく unnamedplus が設定されていなければなりません。

注意点

自分はこれだけではうまく動かずはまってしまいました。

ヤンクした結果を terminal に貼ることができなかったので clipboard に入っていないものだと思っていたのですが、 どうやら vim で編集しているファイルを閉じたりバックグランドでの実行に移すタイミングでレジスタがクリアされていたようです。

参考:Prevent Vim from clearing the clipboard on exit - Stack Overflow

自分は解決策としては上の記事にあるように .vimrc に以下の設定をいれました。

autocmd VimLeave * call system("xsel -ib", getreg('+'))

autocmd VimLeavevim 終了直前に発火するイベントです(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"

amd64armhf で別のリポジトリが用意されています。 arch コマンドで PC のアーキテクチャを調べてからインストールするほうを決めます。

ちなみに自分の PC では

$ arch
x86_64

と表示されてどちらをとってくればいいかわからなかったのですが、amd64x86_64AMD 社がリブランドしたものらしいです。

参考: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

これで一旦完了です。