VIMでREPL使いたいよね?
僕は使いたいです。それも非同期処理で。
今回はほぼ標準機能だけでターミナルモードを使う方法でやりましょう。
詳しくは公式をみて下さい。
http://vim-jp.org/vimdoc-ja/terminal.html#Terminal-mode
TL;DR
bashrcで任意のキー(ここでは下矢印)に下記のようにマッピングして
nnoremap <Down><C-w><C-w><C-w>"0p<C-w><C-w>
任意のreplをターミナルモードから呼び出し(ここではipython)
:term ipython
あとは元の分割画面に戻って操作。
文字列をヤンクして上記のキー押したらreplに放り込まれる。
前提
新しいバージョンのvimでターミナルモードが有効の設定で
コンパイルされていること。
ターミナルモード
もし上記が有効ならば、下記でターミナルモード起動できます。
:term
こいつでvim内でターミナルモード起動できますが、
ipythonとか、Rとか直接起動したいならこんな感じで起動できます。
:term ipython
ターミナルモードに関しては公式が詳しいですが、簡単に使い方を言うと…
キー | 挙動 |
---|---|
Ctr-w | hjklで分割画面移動 |
Ctr-w Ctr-w | 連打で分割画面移動 |
Ctr-w w | 同上 |
Ctr-w N | ターミナルノーマルモード。コマンド入力不可。終了時とかヤンクに使う。 |
CTRL-W " {reg} | レジスタからペースト |
ターミナルモードへの貼付け
ターミナルモードへ手軽に貼り付けられなかったら意味ないですね?
キーマッピングを設定しましょう。例えばこうします。
tnoremap <C-x><C-w>"0p
これでターミナルモードでCtr-xを押すことで
直前にヤンクした内容を貼り付けて実行できます。
…この程度じゃあまりIDEより手軽じゃない気がしますね?一々移動しないといけないし。
そこで、エディタでヤンクしたものをreplに投げ込み、
即座にエディタに戻ってくる設定をします。
作ったマッピング
過激派vimmerは矢印キーが不要ですので、下記のように下矢印キーに
マッピングしちゃうことも出来ますね。
nnoremap <Down><C-w><C-w><C-w>"0p<C-w><C-w>
このマッピングであれば、下矢印でヤンクした物を貼り付けます。
もちろん、自分の使ってないマッピングならなんでも良いと思います。
このマッピングの弱点と克服
Ctr-w Ctr-wはvimでは分割した画面の中の、別の場所に移動するというやつです。
なので、既に画面を分割している場合は苦しいですね。
そんな時はtabが便利になります。
「tabじゃなくて左右にsplitした状態でやりたいんだよ👹」という方は、
nnoremap <Right><C-w>l<C-w>"0p<C-w>h
とかすれば良いと思います。人の数だけvimrcがあるのですからね。