Neovimのターミナルモード。便利ではあるものの初期状態だとなかなか使いにくい部分があったので僕なりに改善しました。
ターミナルモード(terminal mode)とは
ターミナルモードとは
vimから進化を遂げたneovimの大きな特徴として,terminalモードが実装されたことがあげられます.
ターミナルモードでは普通のコンソールと全く同様のものをvimのキーバインドで操作できるような作りになっています.
ターミナルモードの起動コマンドは次のようになっています.
下記コマンドを実行すると,ターミナルエミュレータが新しいタブで開きます.
:terminal
(https://sy-base.com/myrobotics/vim/neovim-settings/ より引用)
改善1. 切り替えを楽に
ターミナルモードを起動するのに毎回:terminal
と打つのはめんどくさいです。
neovimの設定ファイルinit.vimに以下を追記
" 新規タブでターミナルモードを起動
nnoremap <silent> tt <cmd>terminal<CR>
" 下分割でターミナルモードを起動
nnoremap <silent> tx <cmd>belowright new<CR><cmd>terminal<CR>
個人的にはvscodeみたいにウィンドウの下部分にターミナルを表示したかったので、画面下分割&ターミナルモード切り替えをtx
で可能にしました。
新規タブで開く場合はtt
で可能です。
改善2. ターミナルを開いたら常にインサートに
切り替えは楽になりましたが、ターミナルを開いた後にそのままコマンド実行できなかったらスマートじゃないので、、
以下を追加
" ターミナルを開いたらに常にinsertモードに入る
autocmd TermOpen * :startinsert
ターミナルモードのバッファを開いた時点でインサートモードにすることでターミナル開いた際にすぐにコマンドが実行できるようになりました!
行番号は非表示にする
ターミナルで行番号が表示されていたらなんか気持ち悪いので
" ターミナルモードで行番号を非表示
autocmd TermOpen * setlocal norelativenumber
autocmd TermOpen * setlocal nonumber
改善3. <C-w>で使えるウィンドウの管理系をターミナルモードにマップする
ターミナルモードでの操作を改善します。
以下を追加
tnoremap <ESC> <C-\><C-n>
tnoremap <C-W>n <cmd>new<cr>
tnoremap <C-W><C-N> <cmd>new<cr>
tnoremap <C-W>q <cmd>quit<cr>
tnoremap <C-W><C-Q> <cmd>quit<cr>
tnoremap <C-W>c <cmd>close<cr>
tnoremap <C-W>o <cmd>only<cr>
tnoremap <C-W><C-O> <cmd>only<cr>
tnoremap <C-W><Down> <cmd>wincmd j<cr>
tnoremap <C-W><C-J> <cmd>wincmd j<cr>
tnoremap <C-W>j <cmd>wincmd j<cr>
tnoremap <C-W><Up> <cmd>wincmd k<cr>
tnoremap <C-W><C-K> <cmd>wincmd k<cr>
tnoremap <C-W>k <cmd>wincmd k<cr>
tnoremap <C-W><Left> <cmd>wincmd h<cr>
tnoremap <C-W><C-H> <cmd>wincmd h<cr>
tnoremap <C-W><BS> <cmd>wincmd h<cr>
tnoremap <C-W>h <cmd>wincmd h<cr>
tnoremap <C-W><Right> <cmd>wincmd l<cr>
tnoremap <C-W><C-L> <cmd>wincmd l<cr>
tnoremap <C-W>l <cmd>wincmd l<cr>
tnoremap <C-W>w <cmd>wincmd w<cr>
tnoremap <C-W><C-W> <cmd>wincmd w<cr>
tnoremap <C-W>W <cmd>wincmd W<cr>
tnoremap <C-W>t <cmd>wincmd t<cr>
tnoremap <C-W><C-T> <cmd>wincmd t<cr>
tnoremap <C-W>b <cmd>wincmd b<cr>
tnoremap <C-W><C-B> <cmd>wincmd b<cr>
tnoremap <C-W>p <cmd>wincmd p<cr>
tnoremap <C-W><C-P> <cmd>wincmd p<cr>
tnoremap <C-W>P <cmd>wincmd P<cr>
tnoremap <C-W>r <cmd>wincmd r<cr>
tnoremap <C-W><C-R> <cmd>wincmd r<cr>
tnoremap <C-W>R <cmd>wincmd R<cr>
tnoremap <C-W>x <cmd>wincmd x<cr>
tnoremap <C-W><C-X> <cmd>wincmd x<cr>
tnoremap <C-W>K <cmd>wincmd K<cr>
tnoremap <C-W>J <cmd>wincmd J<cr>
tnoremap <C-W>H <cmd>wincmd H<cr>
tnoremap <C-W>L <cmd>wincmd L<cr>
tnoremap <C-W>T <cmd>wincmd T<cr>
tnoremap <C-W>= <cmd>wincmd =<cr>
tnoremap <C-W>- <cmd>wincmd -<cr>
tnoremap <C-W>+ <cmd>wincmd +<cr>
tnoremap <C-W>z <cmd>pclose<cr>
tnoremap <C-W><C-Z> <cmd>pclose<cr>
インサートモード→ノーマルモードに戻る操作がやりにくかったので、<ESC>
で抜けれるようしています。
後はで直感的に操作できるようになりました。
終わりに
これでターミナルモードの操作がだいぶ快適になりました。
僕自身neovim関する知識はまだまだなので、ご指摘やもっと良い書き方などありましたら教えていただけると助かります!
【参考文献】
とても参考にさせていただきました!ありがとうございます!
https://zenn.dev/kyoh86/articles/b81c401cecc91c
https://sy-base.com/myrobotics/vim/neovim-settings/