neovimのterminal emulatorが便利すぎた

Jul 2, 2016   #vim 

少し前にvimからneovimに移行したのですが、vimよりさくさくな気がする、程度でneovimの機能を特に活用していませんでした。

実はneovimにはterminal emulatorという機能があり、vimの中でshellを起動することができます。

例えばコードを書きつつ、rspecを実行したりpryやtigを使ったりなど、非常に便利です。

簡単な使い方の紹介

terminal emulatorを起動するには:terminalを実行します。

起動すると最初はキーバインドがterminal modeになっています。

そのままlsなどを実行すれば実行できると思います。

<C-\><C-n>でcommand modeにすることができます。

command modeから再びterminal modeにするには、insert modeに入るときのようにiaなどでできます。

terminal emulatorを終了したいときはterminal mode中にexitなどで普通にshellを終了させるか、command modeで:qなどを使えばvimごと終了できます。

自分がやった設定

デフォルトのままでは使いづらいため、いくつか自分が設定した項目を紹介します。

デフォルトで起動するshellを変える

terminal emulatorはデフォルトでshを起動しますので、普段使っているshell環境でなかったり、パスが通ってなかったりで使いづらいです。

デフォルトで起動するshellは以下のように書くことで変えることができます。

" ~/.config/nvim/init.vim

set sh=zsh

ESCでcommand modeにする

terminal mode中は、insert modeなどと違い、command modeに戻るためのデフォルトのキーバインドが<C-\><C-n>となっています。

このままでは使いづらいので、ESCでcommand modeに戻れるように設定します。

terminal mode内でkey mapを設定したい場合はtnoremapで設定できます。

Vim documentation: nvim_terminal_emulator

" ~/.config/nvim/init.vim

tnoremap <silent> <ESC> <C-\><C-n>

最初はjjでも戻れるように設定していたのですが、terminal mode内でtigなど、vimライクなキーバインドのツールを使うときに困ったため、ESCのみ設定しています。

もしinsert modeと同じようにjjでcommand modeにしたい場合は以下のように書けば良いと思います。

" ~/.config/nvim/init.vim

tnoremap <silent> jj <C-\><C-n>

neotermを使う

kassio/neoterm

上述したように特にvim pluginを入れずともneovimは:terminalでterminal emulatorを使うことができます。

ただ、neotermを入れることで:T tigのように任意のコマンドを実行し、かつsplitウィンドウでterminalを起動することができるようになります。

また私は使っていませんが、neoterm側でテストコマンドやREPLをサポートしており、いちいち:T bundle exec rspec:T bundle exec pryのようにせずとも一発で立ち上げることもできます。

おまけ

vimの中でemacsを起動する、という芸当もできます