vimと端末

Ubuntuでvimを使う際にvimでコピーした文字列をシステムのクリップボードにコピーすることができないのが不便なので、クリップボードを連携する方法を試してみた。

 

 

標準環境

標準環境について確認する。

ペースト

Ubuntuのインストール直後の標準の状態でも、システムのクリップボードからvimへ貼り付け・ペーストすることはできる。

ターミナルの機能を利用して CTRL+SHIFT+V

vimの挿入モードから SFHIT+INSERT

コピー

クリップボードからvimへの貼り付けは容易にできるが、vimからクリップボードへ文字列を送るのはできないっぽい。

端末からvimのバージョンを確認してみると、標準でインストールされているvimはGUIのない軽量バージョンだということがわかる。

$ vi --version
VIM - Vi IMproved 7.4 (2013 Aug 10, compiled Nov 24 2016 16:44:48)
Included patches: 1-1689
Extra patches: 8.0.0056
Modified by pkg-vim-maintainers@lists.alioth.debian.org
Compiled by pkg-vim-maintainers@lists.alioth.debian.org
Small version without GUI.  Features included (+) or not (-):
+acl             -farsi           -mouse_sgr       -tag_any_white
-arabic          -file_in_path    -mouse_sysmouse  -tcl
-autocmd         -find_in_path    -mouse_urxvt     +terminfo
-balloon_eval    -float           -mouse_xterm     -termresponse
-browse          -folding         +multi_byte      -textobjects
+builtin_terms   -footer          -multi_lang      -timers
-byte_offset     +fork()          -mzscheme        -title
-channel         -gettext         -netbeans_intg   -toolbar
-cindent         -hangul_input    +packages        -user_commands
-clientserver    +iconv           -path_extra      +vertsplit
-clipboard       -insert_expand   -perl            -virtualedit
-cmdline_compl   -job             -persistent_undo +visual
+cmdline_hist    +jumplist        -printer         -visualextra
-cmdline_info    -keymap          -profile         -viminfo
-comments        -langmap         -python          -vreplace
-conceal         -libcall         -python3         +wildignore
-cryptv          -linebreak       -quickfix        -wildmenu
-cscope          -lispindent      -reltime         +windows
-cursorbind      -listcmds        -rightleft       +writebackup
-cursorshape     -localmap        -ruby            -X11
-dialog          -lua             -scrollbind      +xfontset
-diff            -menu            -signs           -xim
-digraphs        -mksession       -smartindent     -xsmp
-dnd             -modify_fname    -startuptime     -xterm_clipboard
-ebcdic          -mouse           -statusline      -xterm_save
-emacs_tags      -mouse_dec       -sun_workshop    -xpm
-eval            -mouse_gpm       -syntax          
+ex_extra        -mouse_jsbterm   -tag_binary      
-extra_search    -mouse_netterm   -tag_old_static  
   system vimrc file: "$VIM/vimrc"
     user vimrc file: "$HOME/.vimrc"
 2nd user vimrc file: "~/.vim/vimrc"
      user exrc file: "$HOME/.exrc"
  fall-back for $VIM: "/usr/share/vim"
Compilation: gcc -c -I. -Iproto -DHAVE_CONFIG_H   -Wdate-time  -g -O2 -fPIE -fstack-protector-strong -Wformat -Werror=format-security -DTINY_VIMRC -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1      
Linking: gcc   -Wl,-Bsymbolic-functions -fPIE -pie -Wl,-z,relro -Wl,-z,now -Wl,--as-needed -o vim    -lSM -lICE -lXpm -lXt -lX11 -lXdmcp -lSM -lICE  -lm -ltinfo  -lselinux -lacl -lattr -ldl           

また、vimに実装されている機能の有無についてもリストとして確認できて、clipboard機能は追加されていないこともわかる。

方法

vimでクリップボードと連携する方法について。

新規インストール

標準のvimは軽量バージョンだったので、クリップボード機能が追加されているバージョンのvimを適当にインストールする。

$ sudo apt install vim-gnome
or
$ sudo apt install vim-gtk
or ...

ペースト

先の方法以外に “+p でクリップボードからVimにペーストできる。

コピー

Vimからクリップボードへのコピーは “+y で連携できる。

簡易版

“+pや”+yといったレジスタ指定が面倒な場合は、Vimに設定を追加すると通常のヤンク&ペーストでクリップボードと連携できる。

$ vi ~/.vimrc
set clipboard=unnamedplus

終わりに

システムのクリップボードとVimを連携する方法は何通りかあるみたい。

個人的に、カスタマイズするのはEmacs、標準設定で使うのがVimと使い分けているので、当分は設定ファイルを作成しないレジスタ指定の方法でヤンク&ペーストを使ってみる。

ただすでにGUI版のVimをインストールしていて、標準状態のVimを使うというルールも微妙になっているので、レジスタ指定が面倒に感じてきたら設定を追加するかも。

参考

command line – Unable to copy from vim to system clipboard – Ask Ubuntu

Cut to the system clipboard from Vim on Ubuntu – Stack Overflow

 

【Linux】UbuntuのVimでクリップボード機能を有効にする方法
Tagged on:         

コメントを残す