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