人生リアルタイムアタック

当面はPython学習帳

Atom の vim-mode-plus で shift-Y でヤンクした時に、行ヤンクでなく現在のカーソル位置から行末までのヤンクにする

追記 2017-08-30

v0.99.0 から設定画面から設定可能になりました。

f:id:ShineSpark:20170830130809p:plain

以下元の投稿。

最近Atomを使い始めて、Vimとの齟齬を少しずつ解消している。 AtomでのVim再現にはatom-vim-mode-plusを使っているのだが、 Y が行ヤンクだったのをカーソル位置から行末までのヤンクに変える方法を調べたのでその記録。

github.com

そもそも VimY が行ヤンクであることに納得が行かない理由

通常、小文字で2回連続オペレーターコマンドを叩いた場合にはカーソル位置に関わらず一行に作用する。
また、大文字でオペレーターコマンドを叩いた場合には、カーソル位置から行末まで作用する。

コマンド 挙動
dd 一行削除
D カーソル位置から行末まで削除
cc 一行削除してインサートモードへ
C カーソル位置から行末まで削除してインサートモードへ
yy 一行ヤンク
Y 一行ヤンク

しかし、ヤンクの場合に限り、yyY の挙動に差異がない。 その為、 .vimrc に

" yank to end of a line.
nnoremap Y y$

と書いて Y をカーソル位置から行末までのヤンクに書き換える手法がある。 一定の法則に則った挙動なので、このヤンクに慣れると Y で一行ヤンクされると違和感がある。

Atom でもその挙動を実現する。

実はコマンドは https://github.com/t9md/atom-vim-mode-plus/blob/eeb88cfc9b0aedb2c7d07363fd2023c75c18bc18/lib/command-table.coffee#L72-L75 に実装されていた。

YankToLastCharacterOfLine:
  file: "./operator"
  commandName: "vim-mode-plus:yank-to-last-character-of-line"
  commandScope: "atom-text-editor"

その為、 keymap.cson に以下を追加するだけで利用可能になる。

'atom-text-editor.vim-mode-plus:not(.insert-mode)':
  'shift-y': 'vim-mode-plus:yank-to-last-character-of-line'

参考