【Linux】【nvim】プラグイン追加 - neoterm【SW】

Neovim に対して、neoterm プラグインを追加する
 
本ページは Neovim のプラグイン導入のつづきである

  • Ubuntu 18.04 環境の nvim 、 nvim-qt で確認済。
  • $HOME/.config/nvim/userautoload/plugins/ 以下の私独自設定のファイルを読み込むようにしている。

  

 
個人的には Ctrl-z → シェルのコマンドラインで実行→ jobs 等のバックグラウンド使用で間に合っていたが、本プラグインは高評価だったので試しに使わせてもらった。
 
 

neoterm のインストールおよびセットアップ

1. neoterm をインストールする。

(dein を導入済みであるものとして) 以下を書いてnvim を起動させればインストールされる。

$HOME/.config/nvim/init.vim

call dein#add('kassio/neoterm') " neoterm

中略

if filereadable(expand($HOME/.config/nvim/userautoload/plugins/plugin_neoterm.vim))
    source $HOME/.config/nvim/userautoload/plugins/plugin_neoterm.vim
endif

 

2. $HOME/.config/nvim/userautoload/plugins/plugin_neoterm.vim を作成する

後述の neoterm の使い方を見て、次のように設定をした。
なお、バッファ切り替えの「:Ttoggle」は使わないので定義していない。
バッファ切り替えは「itchyny/thumbnail.vim」で実現している。

" :Tnew の場合に挿入モードで開始する
let g:neoterm_autoinsert = 1

" :T {cmd} 実行時に画面スクロールをする
let g:neoterm_autoscroll = 1

" 縦分割する
" let g:neoterm_default_mod='vertical'
" 横分割する
let g:neoterm_default_mod='belowright'

" :Tnew 実行
nnoremap <silent> <C-e><C-t> :Tnew<CR>
" :Tnew 実行(縦分割)
nnoremap <silent> <C-e><C-v> :vertical Tnew<CR>
" 非ビジュアルモード
nnoremap <silent> <C-e><C-e> :TREPLSendLine<CR>
" ビジュアルモード
vnoremap <silent> <C-e><C-e> V:TREPLSendSelection<CR>
" ファイル送信
nnoremap <silent> <C-e><C-f> :TREPLSendFile<CR>

 
 

neoterm の使用方法

 

:T {cmd}

『「:terminal」を実行』して『「cmd」コマンドを入力する』という2手分を、『「:T cmd」』の1手で済ませることができる。
以下、実例。

例: make で C言語プログラムをビルド(コンパイル&リンク)する場合 (:T {cmd})

1. nvim で main.c と Makefile を作成する
このとき nvim の画面構成は以下のようになっている。

f:id:dnkrnka:20180515235353p:plain:w300:right
main.c

#include <stdio.h>
int main()
{
    printf("xx");
    return 0;
}

Makefile

all: main.c
        gcc -Wall -g main.c -o main.out
clean:
        rm -f main.out

 
2. nvim のコマンドラインから「:T make」を呼び出す
「新規 Terminal が開かれる」。そして「ビルド」が行われる。

「 :T make 」 を実行する。
f:id:dnkrnka:20180516001201p:plain
 

バッファが terminal に切り替わり、ビルドが実行される。
f:id:dnkrnka:20180516001045p:plain

 

:Tnew [オプション]

新規 neoterm バッファを開くのみで、コマンドは呼び出さない。
単に新規バッファを作って「:terminal」を実行するということ。
繰り返しになるが、「新規バッファを開いて」、「:terminal を実行」する2手分を1手で済ませることができる。
 

バッファ一面に新規 neoterm を開く (:Tnew)
:Tnew 

 

縦分割で neoterm バッファを開く (:Tnew)
:vertical :Tnew

 
常に縦分割で開く場合は次のように g:neoterm_default_mod を定義すれば良い。
なお、g:neoterm_position は廃止になった模様

let g:neoterm_default_mod='vertical'

 

水平分割で neoterm バッファを開く (:Tnew)
:belowright :Tnew

 
上記同様に常に横分割にする場合は次のようにすれば良い(はず)*1

let g:neoterm_default_mod='belowright'

 

挿入モードで開始する (:Tnew)

挿入モード*2で開始するには let g:neoterm_autoinsert = 1 を init.vim 等で設定する。
デフォルトはノーマルモード(値 0)である。

let g:neoterm_autoinsert = 1

 

REPL を使う

REPL の意味についてはこちらの記事が簡潔でかつ大変わかりやすかった。
個人的には、「:TREPLSendLine」と「V:TREPLSendSelection」が無ければ neoterm は導入しなかったと思う*3
REPL の実行例はこちらを参考に以下に示すが、キーを次のように割り当てた。
 

:TREPLSendLine の使用例

カーソルがある行をコマンド入力として実行させる。C-e C-e にバインドさせた。

nnoremap <silent> <C-e><C-e> :TREPLSendLine<CR>

 
A-1. バッファに「pwd; echo "Sleep 3sec"; sleep 3」といったコマンドを羅列した行を書く
f:id:dnkrnka:20180516103407p:plain
 
A-2. 上記 1 の行で「:TREPLSendLine」(上述のキーバインド設定時は C-e C-e )を実行する
以下のように「pwd; echo "Sleep 3sec"; sleep 3」が実行される。
f:id:dnkrnka:20180516103730p:plain
 
もう少し複雑なコマンドを実行させる
「echo "Find start..."; find $HOME/.config/ -type f -name config.fish | xargs -I@@@ cat -n @@@」を実行させた場合。
B-1. 実行させたいコマンドをバッファに書く。(下図右ペイン)
B-2. 該当行で :TREPLSendLine を実行する。
B-3. 画面が縦分割されて terminal が起動して、B-1 のコマンドが実行される (下図左ペイン)
f:id:dnkrnka:20180516104431p:plain
 

:TREPLSendSelection の使用例

ビジュアルモードで選択した範囲をコマンドラインに送る。
こちらも C-e C-e にバインドさせた。

vnoremap <silent> <C-e><C-e> V:TREPLSendSelection<CR>

 
1. ビジュアルモードで選択する
f:id:dnkrnka:20180516104756p:plain
 
2. 上記 1 のビジュアル選択状態で「:TREPLSendSelection」(上述のキーバインド設定時は C-e C-e )を実行する
f:id:dnkrnka:20180516105239p:plain
 

:TREPLSendFile の使用例

現在のファイルを実行する。このとき neoterm の REPL がコマンドを選択してくれる。
 
Ruby ファイルの場合 (:TREPLSendFile)
1. 以下の通り map_collect.rb を作成する

map_collect.rb
f:id:dnkrnka:20180516105239p:plain

 
2. 「:TREPLSendFile」を実行する
REPL により irb が実行されて、上記 1 の map_collect.rb が実行された
f:id:dnkrnka:20180516110418p:plain

*1:試していないが、help mods を見るとこう設定すれば良さそう

*2:コマンド入力モード

*3:Ctrl-z →・・・ のバックグラウンドの方が早いので