Neovim をターミナル環境として使用するときとかのメモとか
Neovim にはターミナルエミュレータが埋め込まれており,:terminal
等で起動することができる.
じゃあ最初から端末の代わりに Neovim 開いちゃえばいいじゃんということで,それをもっと便利にするためのメモ.
便利なプラグイン
基本的に新しい端末を開かないで,新しいバッファを開くようにすると楽なため,バッファに関するプラグインを入れておくと便利.
itchyny/lightline
ステータスラインとタブラインがかっこよくなるやつ.
taohex/lightline-buffer
lightline のプラグインで,タブラインにバッファを表示する.タブよりバッファ使う人用.
README にある通り init.vim
に以下のような設定が必要.
let g:lightline = { \ 'tabline': { \ 'left': [ [ 'bufferinfo' ], [ 'bufferbefore', 'buffercurrent', 'bufferafter' ], ], \ 'right': [ [ 'close' ], ], \ }, \ 'component_expand': { \ 'buffercurrent': 'lightline#buffer#buffercurrent2', \ }, \ 'component_type': { \ 'buffercurrent': 'tabsel', \ }, \ 'component_function': { \ 'bufferbefore': 'lightline#buffer#bufferbefore', \ 'bufferafter': 'lightline#buffer#bufferafter', \ 'bufferinfo': 'lightline#buffer#bufferinfo', \ }, \ }
'close'
はなんのためにあるのかよくわかっていない.
mhinz/vim-sayonara
:Sayonara
すると現在のバッファを閉じ,最後の1つだった場合ウィンドウを閉じる(たぶん).ウィンドウを閉じたくない場合はなぜか :Sayonara!
.しめやかに爆発四散.
:bdelete
だとバッファが最後の1つだった場合ウィンドウを閉じてくれない.ウィンドウを閉じたい場合はこれを使うと便利かもだ.
init.vim
に書いておくと便利な設定
左右矢印キーでのバッファ移動
矢印キーに,バッファを移動する :bnext
, :bprev
を割り当てる.お好みでノーマルモード以外にも割り当てたり,Alt + 矢印にしたりとか.
nnoremap <Left> :<C-u>bprev<CR> nnoremap <Right> :<C-u>bnext<CR>
ターミナルモード中に ESC でコマンドモードに戻る
<C-\><C-n>
なんてどう考えても打っていられないので.
tnoremap <silent> <ESC> <C-\><C-n>
新しいターミナルを開く
:enew
で新しいバッファを開いてから :terminal
でもいいんだけど,一発で開けると便利かもだ.
command! Tnew :enew | :terminal
これで :Tnew
で新しいターミナルが新しいバッファに開くようになる.
また :Term
や :VTerm
で水平・垂直分割して新しいターミナルバッファを開く vimlab/split-term.vim のようなプラグインもある.お好みで.
Sayonara
上記プラグインの :Sayonara
を :Q
にマップ.
command! -bar -nargs=* -complete=file -range=% -bang W \ <line1>,<line2>write<bang> <args> command! -bar -nargs=* -complete=file -range=% -bang Write \ <line1>,<line2>write<bang> <args> command! -bar -nargs=* -complete=file -range=% -bang Wq \ <line1>,<line2>write<bang> <args> | :Sayonara command! -bar -nargs=* -complete=file -range=% -bang WQ \ <line1>,<line2>write<bang> <args> | :Sayonara command! -bar -bang Wqall wqall<bang> command! -bar -bang WQall wqall<bang> command! -bar Q :Sayonara command! -bar Quit :Sayonara command! -bar -bang Qall qall<bang>
便利なツール
mhinz/neovim-remote
要 Python3.pip3 でインストールする.
ターミナルモードで nvim
すると新しい nvim が開いてしまう.これを入れると nvr
で現在の nvim 中でファイルを開けるようになる.なんでかはよくわからん.
alias :e=nvr
とかしておくとターミナルモードで :e text.txt
とかできて便利かもだ.
Dock に追加 (Mac)
Mac で Dock 上から起動するためには一工夫必要.色々な方法がありそうだが今回は AppleScript を利用する.
Automator で「アプリケーション」を選択し,「AppleScript を実行」をダブルクリックし以下のように記述する.
on run {input, parameters} set cmd to "nvim -c :terminal; exit" -- 実行するコマンド tell application "Terminal" -- ターミナルが起動していない場合は launch で起動する -- launch しないと暗黙的に run され,ウィンドウが1つ開いてしまう launch activate -- 最前面に表示 -- ウィンドウが開いていない場合のみコマンドを実行する if number of windows < 1 then -- Terminal は run/reopen 命令を受けると -- 新規ウィンドウがなければ新しく作成する reopen -- 1番めのウィンドウでコマンドを実行 do script cmd in window 1 end if end tell end run
これを保存すると .app
ファイル(フォルダ)が作成されるので,Dock に追加できる.ついでにアイコンも Neovim のアイコンにするとかっこいい(?)
できてないこと
- バッファが1つのときにターミナルモードで exit しても終了しない.
- 履歴に
nvim -c :terminal; exit
が残る - クリップボード連携
- シェルのカレントディレクトリと nvim のカレントディレクトリがあるのでなんかややこしい.
- :Tnew で開くシェルが nvim のカレントディレクトリで開いてしまう
感想
結構頑張って設定しないとあんまり便利じゃなさそう.