2015/02/20 追記
vim-modeの0.33.0でクリップボードと無名レジスタの共有が追加されました。
現在は下記の設定を行う必要はありません。
はじめに
現在のところatomのvim-modeのyankはクリップボードと共有できません。
(atom: 0.165.0, vim-mode:0.21.0時点)
本家vimだとvimrcにset clipboard+=unnamed
と書いておくと、yankした値はclipboardと共有できます。
vimエディタからクリップボードを利用する。 — 名無しのvim使い
vimで普段からこの設定に慣れていると、atomで使えないのに非常にストレスが溜まります。
これをなんとかしてみました。
init.coffeeにコマンドを定義する
init.coffeeとは
init.cofeeはatom起動時に、一番最後に読み込まれる設定ファイルです。
When Atom finishes loading, it will evaluate init.coffee in your ~/.atom directory, giving you a chance to run arbitrary personal CoffeeScript code to make customizations.
一番最後に適用されるのでここでvim-modeのコマンドを呼ぶこともできそうです。
ここに自分用のyankを作ることにします。
書いてみた
- init.coffee
atom.workspaceView.eachEditorView (editorView) ->
editorView.command 'my-command:yank', ->
editorView.trigger('core:copy')
editorView.trigger('vim-mode:yank')
コマンド内容は'core:copy'と'vim-mode:yank'を2つやるってだけです。非常にシンプルです。
atom.workspaceView.eachEditorView (editorView)
でeachしているeditorViewに紐付けると、editor viewでしか使えないコマンド、という定義ができるようです。
例えば、このコマンドはtree viewでは使えません。
githubの中の人の公開しているinit.coffeeを見たりしてこの記述に辿り着いたのですが、現在公式にはこのAPIは書いていない気がします。
(見落としてるだけかな?)
keybindを定義する
keymap.csonで先ほど定義したコマンドを割り当てます。
- keymap.cson
'.editor.vim-mode:not(.insert-mode)':
'y' : 'my-command:yank'
すでに登録されているキーバインドをkeymap.csonに書いた場合は上書きになります。
この設定で、vim-mode本来のyankは使わずに、自分で定義したmy-command:yank
を使うように上書きしています。
動作検証
init.coffeeは起動時に読み込まれるので、atomを再起動する必要があります。
yでyankした値がclipboardに入っていれば成功です!
終わりに
init.coffeeの書き方がわからなくて苦労してしまいましたが、なんとか動きました!
もっと良いやり方があるかもしれません。
ご存知の方は教えてください!
ところでatomのvim-modeにはこんなissueが上がっていた
なるほど、確かに"*yy
でyankすればクリップボードに入りますね!
こうすれば*レジスタに入るので共有できるということですね。
でも毎回打つの面倒なので却下しました。
(設定でyank時に使うレジスタ変更できるPR出すのが正解ですね!だれかおねg)