neovimの便利設定 ターミナルモードのマッピング

neovimを使い始めてからいろいろと設定をいじってみて,ターミナルモードの仕様について徐々にわかってきました.
そこで,今回は備忘録も兼ねてneovimのターミナルモードについてまとめてみようと思います.

 

 

ターミナルモードとは

vimから進化を遂げたneovimの大きな特徴として,terminalモードが実装されたことがあげられます.
ターミナルモードでは普通のコンソールと全く同様のものをvimのキーバインドで操作できるような作りになっています.
ターミナルモードの起動コマンドは次のようになっています.
下記コマンドを実行すると,ターミナルエミュレータが新しいタブで開きます.

:terminal

上の画像では左側でコードを編集し,右側でターミナルを起動しています.

 

 

ターミナルモード,ノーマルモードへの移行

ターミナルのウィンドウをvim内で立ち上げると,始めはターミナルモードとなっています.
ターミナルウィンドウでは主にnormalモードとterminalモードで操作していくことになります.
terminalモードはターミナル上でコマンドを入力するためのモードで,テキストを編集する時のinsertモードと同じような働きをします.

normalモードからterminalモードへの移行
こちらはとても簡単,普通のvimでiキーでinsertモードに入るのと同様にiキーでterminalモードに移行できます.

terminalモードからnormalモードへ移行
ターミナルモードを抜け,ノーマルモードに戻るコマンドは<C-\><C-n>(Ctrl + \ , Ctrl + n)になります.
なぜ<ESC>でterminalモードからnormalモードへ移行できるような仕様にしなかったのかが不思議ですが(<ESC>と<C-[>と<C-c>が連携していて,<C-c>がターミナル上のCtrl-cとバッティングするからでしょうか???)まあよしとしましょう.
ターミナルモードが実装されたことで,いちいちmakeするために別端末を起動してコマンドを打つ必要がなくなるため,私にとっては非常にありがたいです.

 

 

ターミナルモードのマッピング

" neovim terminal mapping
if has('nvim')
	" 新しいタブでターミナルを起動
	nnoremap @t :tabe<CR>:terminal<CR>
	" Ctrl + q でターミナルを終了
	tnoremap <C-q> <C-\><C-n>:q<CR>
	" ESCでターミナルモードからノーマルモードへ
	tnoremap <ESC> <C-\><C-n>
endif

私は普段<C-[>コマンドでinsertモードからnormalモードへの移行を行っています.
なので,terminalモードでもやっぱり<C-[>コマンドでnormalモードへ戻るよう設定してみました.
まずはじめに if has(‘nvim’) で分岐させることで,neovimで起動した時だけterminalモードのキーマッピングを設定するようにします.
設定ファイル(~/.config/nvim/init.vim)をvimとneovimで共有しているため,vimで読み込んだ時にterminalモードの設定が反映されないようにしています.

@t
新しいタブでターミナルを開く

<C-q>
ターミナルの終了

<ESC>
ターミナルモードからノーマルモードへ

ターミナルモードのデフォルト設定ではESCキーでノーマルモードに戻ることができないので,ESCキーでノーマルモードに戻れるようにマッピングしています.

 

 

ターミナルモード関連のプラグイン

neovimのターミナルモードのプラグインにneotermというものがあります.
私はこのプラグインを愛用しておりますので,こちらも参考にしてみてください!

neovim × neoterm = 最強 | MY ROBOTICS