Vimでコードのテストをしながら書きたい。一行ずつ書きたい。間違ってたら一行だけ戻って再実行したい。この目的のためにnvim-Rを使ってきたが、Rだけじゃなくてshell-scriptやpythonをテストしながら書きたいんだ!もちろんVimで!
neovimに搭載されたterminal emulatorに編集中のソースを投げてくれるneotermというプラグインを使えば簡単に実現出来ます。neotermが対応している対話環境が提供されていれば拡張子に応じて自動的に対話環境も立ち上げてくれる。
- neovimをインストールする。
- neotermをインストールする。deinを使った。
- nvimの設定ファイルに以下を記載(~/.config/nvim/init.vim等)
let g:neoterm_autoscroll=1 #REPLを自動的に改行
tnoremap <silent> <ESC> <C-\><C-n><C-w> #ESCでターミナルモードを抜けるため
nnoremap <silent> <C-R> V:TREPLSendLine<cr> #ノーマルモードで現在のカーソル行を実行
vnoremap <silent> <C-R> V:TREPLSendSelection<cr>'>j$ #ヴィジュアルモードで選択範囲を実行
あとは拡張子付きのファイルを開いてコードを書いて、ctrl-rで適当な対話環境が立ちあがり実行されます(.r, .sh, .py etc)。キーバインドは上記の通り、
・ノーマルモードでctrl-rで現在の行を実行
・visual modeで範囲選択したうえでctrl-r
で選択範囲を実行
・(デフォルト)ノーマルモードでctrl-w + hjkl
でペイン間の移動
としています。サーバへの導入も簡単でssh越しでも問題なく使えるので大変便利です。
2018年2月末追記
ctrl-rはRedoだったため一行スクロールのctrl-eを潰すことにしました。executeと覚えよう。また、実行後に次の行に遷移できるように少し変更。縦分割に。
let g:neoterm_autoscroll=1
let g:neoterm_position='vertical'
tnoremap <silent> <ESC> <C-\><C-n><C-w>
nnoremap <silent> <C-e> :TREPLSendLine<CR>j0
vnoremap <silent> <C-e> V:TREPLSendSelection<CR>'>j0