Vim2 Advent Calendar 2017の8日目のエントリです。
ええ、タイトルの通りatom使いです。
gitのcommitの時くらいしかvimを使っていません。
やめてください!石を投げないで!仲間に入れてください!! でも、vimは大好きなんです。
mac上で文字を打つときは全部vimにしたいっていつも思っています。
というわけで、vimの素晴らしさに驚嘆するも、なかなかvimに扱い慣れずatomに来てしまった・・。
だけれどもあの素晴らしい指捌きをもう一度。
そんな方のための記事です。
とりあえずパッケージを入れてみる
atomでvimの良いところを使えるようなパッケージを入れていきます。
パッケージの追加方法
Ctrl-,
でatomの設定を開いて以下の画像の番号の順番で操作していきます。
vim-mode-plus
これがないと始まりません。
言わずと知れたt9md氏が開発者のatomパッケージです。
vimのキーバインドをatom上でも使えるようにするためのパッケージです。
ものすごく多機能です。
こちらにチュートリアルがあります。
若干本家のvimと異なるキーバインドもありますが大体できます。
僕はsettingでデフォルトに加え、上4つと一番下にチェックを付けています。
- keymap ‘Y’ to ‘yank-to-last-character-of-line’
- keymap ‘s’ to ‘select’
- keymap ‘_’ to ‘replace-with-register’
- keymap ‘p’ and ‘P’ to ‘put-after-with-auto-indent’ and ‘put-before-with-auto-indent’
- keymap ‘I’ and ‘A’ to ‘insert-at-start-of-target’ and ‘insert-at-end-of -target’ when editor has ‘preset-occurrence’ marker
の5つの項目にチェックを付けました。
Occurrence機能
この記事を書く時に初めてドキュメントを読んだのですが、本家のvimにはないoccurrenceという独自機能もあるようで、これが結構便利そうなので少し紹介します。
一つのパラグラフの中の同じ単語を一気に書き換えることができます。
変えたい単語の上でcoip
とすることで実行します。
change,occurrence,in,paragraphですね。
オペレーターコマンドの直後にo
を打つのですね。
同様にレジスタにhogeという単語が入っている時に、 textの上で_op
とすると全部のtextがhogeに変わります。
これすごく便利!!!
コレを実現するためにはSettingで上から3つ目の「keymap ‘_’ to ‘replace-with-register’」にチェックが入っている必要があります。
preset-occurance
もう一つ紹介します。
単語の上でgo
、他にも変えたい単語がアレばその上でもgo
とし、選択しきったらc
などで一気に変更します。
上の画像では「text」まで移動してgo
, 次に「line」まで移動して再びgo
としたあとに vip
でパラグラフ選択し、c
で書き換えています。 ただマクロ機能は付いていません。
t9md氏も今のところは実装しないみたいです。
Support macro (record by q
, replay by @
). · Issue #238 · t9md/atom-vim-mode-plus
【参考】t9md氏のqiita記事です。
- [Vim/vim-mode-plus for Atom] 秒速で初心者からエキスパートになる。 たった7ステップで。 – Qiita
- vim-mode-plus の occurrence のぱわ〜( と demo-mode のぱわ〜) – Qiita
ちょっとよくわからなかった。
Sum up undocumented feature. · Issue #54 · t9md/atom-vim-mode-plus
ex-mode
atom上でvimのコマンドモードを実行できるようにするためのパッケージです。
ただ、たまにできないものもあります。
また、僕自身勉強不足であまりコマンドモードは使っておらず、置換などはatomのデフォルトの機能を使っています。
ちなみにvim-mode-plusの開発者のt9md氏が作ったvim-mode-plus-ex-modeというのもあるようですが そのパッケージの説明欄にex-modeの方がいいよ!って書いてあるので使っていません。
I originally released this package for quick workaround of lack of ex-mode support. ・But now ex-mode works with vim-mode-plus. ・If you want better ex-mode, don’t use this package, use ex-mode instead. ・Experimental ex-mode support for vim-mode-plus
relative-numbers
行番号がカーソルのある行からの相対番号になり10yy
みたいなことがしやすくなります。
デフォルトがどんな感じか忘れましたが下3つにチェックを付けています。
以下の画像の様な感じです。
ノーマルモードの時のみ行番号が相対表示になるので、以下何行をヤンクするのかなどがすぐに把握できますね。
cursor-hisotry
vimのカーソルヒストリーを再現したパッケージです。
デフォルトでキーが設定されていないので、vimと合わせるなら以下のように書きます。 (キーマップの変更方法はこの記事のもうちょい下の方を参照してください)
1 2 3 4 |
# cursor-history 'atom-workspace': 'ctrl-i': 'cursor-history:next' 'ctrl-o': 'cursor-history:prev' |
ただ自分の環境だと若干キーが競合しているので ctrl-i
の代わりにctrl-shit-o
に変更して置きました。
あっち行ってこっち行って、また戻ってという動作を頻繁にするのであると便利です。
ちなみにlast-cursor-positionというパッケージもあり、 こちらのキーマップはalt--
,alt-_
です。
もはやvim関係ないですが。(てへぺろ)
vim-mode-plus-keymaps-for-surround
本家のvim-surroundとは若干指使いが異なります。
vim-surroundというのもあるみたいです。
(vim関連で)良さげだけと入れてないパッケージ
良い感じなのだけど、僕自身はあまり使わないもの一覧です。
誰かの為になれば幸いです。
sort-lines
vimの:sort
と同じ。
atom-keyboard-macros-vim
qコマンドを実行するためのパッケージ。
便利なのですが10@aのように記録したものを連続で使うことはできません。
最近実行したらエラーが出たので使わなくなりました。
vim-mode-plus-exchange
何かと何かを入れ替える。
atom-vim-like-tab
vimのようなタブを実現します。
vim-mode-clicpboard-plus
クリップボードの履歴を閲覧して選択して挿入することができます。
キーマップもちょっと変えてみる
atom上でもキーマップを変更することができるので、お好みのvimキーマップを作成しましょう。
キーマップの変更の仕方
atom上でのキーマップ(ショートカットキー)の変更方法です。 メニューのAtom > キーマップ
から変更できます。
jj
vimのキーマップ変更ではesc
をjj
に割り当てるのが気に入っています。
1 2 3 |
# vim-mode-plusでjjでインサートモードを抜ける 'atom-text-editor.vim-mode-plus.insert-mode': 'j j': 'vim-mode-plus:activate-normal-mode' |
すごく頻繁に使用するesc
ですが、ホームから少し距離があるので大変です。
代わりにctrl-[
もありますが、誤タイプが多いので困っていました。
そこで出会ったのがjj
です。
これに変えてからは人生が大きく変わりました。(まじです)
ctrl-\
ついでに、インサートモードで行末にカーソルを移動するためのキーマップを設定しました。
vimだとesc
+A
とかになるのでしょうか。(わからない)
わざわざノーマルモードに移動するのがあれなのと行末セミコロンのある言語だと割と多用するので設定しておきました。
1 2 3 |
# インサートモードで行末にカーソル移動 'atom-text-editor': 'ctrl-\\': 'editor:move-to-end-of-line' |
まとめ
以上です。
vimとatomの良いところを取っていくスタイルもどうでしょうか。
他にも良い(atomの)vimパッケージがあったら是非教えてほしいです。
今回のこの記事を書くにあたって思ったことはvim界隈って日本人多いのですね。
かっこいいです。
コマンドモードもっと勉強しよっと。