Vim
REPL

Vimでterminal-modeでrepl使う


VIMでREPL使いたいよね?

僕は使いたいです。それも非同期処理で。

今回はほぼ標準機能だけでターミナルモードを使う方法でやりましょう。

詳しくは公式をみて下さい。

http://vim-jp.org/vimdoc-ja/terminal.html#Terminal-mode


TL;DR

bashrcで任意のキー(ここでは下矢印)に下記のようにマッピングして

nnoremap <Down> <C-w><C-w><C-w>"0<C-w><C-w>

任意のreplをターミナルモードから呼び出し(ここではpython)

:term python

あとは元の分割画面に戻って操作。

文字列をヤンクして上記のキー押したらreplに放り込まれる。


2018/5/8追記

ipythonは自動でインデントしてくれたりする関係上

このやり方辛かったです。



前提

新しいバージョンの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>"0

これでターミナルモードでCtr-xを押すことで

直前にヤンクした内容を貼り付けて実行できます。

…この程度じゃあまりIDEより手軽じゃない気がしますね?一々移動しないといけないし。

そこで、エディタでヤンクしたものをreplに投げ込み、

即座にエディタに戻ってくる設定をします。


作ったマッピング

過激派vimmerは矢印キーが不要ですので、下記のように下矢印キーに

マッピングしちゃうことも出来ますね。

nnoremap <Down> <C-w><C-w><C-w>"0<C-w><C-w>

このマッピングであれば、下矢印でヤンクした物を貼り付けます。

もちろん、自分の使ってないマッピングならなんでも良いと思います。


このマッピングの弱点と克服

Ctr-w Ctr-wはvimでは分割した画面の中の、別の場所に移動するというやつです。

なので、既に画面を分割している場合は苦しいですね。

そんな時はtabが便利になります。

「tabじゃなくて左右にsplitした状態でやりたいんだよ👹」という方は、

nnoremap <Right> <C-w>l<C-w>"0p<C-w>h

とかすれば良いと思います。人の数だけvimrcがあるのですからね。