vimとneovimとターミナル操作
こんにちは。最近、バドミントンにハマっているrsudoです。
今回の記事では、vimでファイル編集しながらターミナル操作もしたいときにどうすればいいのか考えていきます。
いくつか方法が考えられますが、設定が楽な順番で紹介した上で今の自分の運用方法について説明します。 一応、vimとneovim両方について書きますが、筆者はneovimを使用しており、vimの使用歴が短いためvimについては詳しく説明できません。
Ctrl-zでvimを一時中断
Ctrl-z
を入力することでプロセスに対しシグナルを送信し、中断させることができます。停止したプロセスはfg
コマンドで再開させることができます。つまり、Ctrl-z
とfg
でターミナルとvimを高速で行き来することが可能になります。
メリット
- 設定が不要
デメリット
- ターミナルを操作している間にvimを中断させてることを忘れる(自分だけかも)
- 画面分割でターミナル操作はできない
iTermの機能で操作する
iTermを使用してい方であれば画面分割や複数ウィンドウの機能がターミナルの機能として使用できます。自分はiTermを使用していないので詳しいことは分かりません。
操作方法についての参考記事: iTerm2ショートカット備忘録 - Qiita
メリット
- 設定が不要
デメリット
- iTermを使ってないとできない(それはそう)
tmuxで操作する
tmuxを使用すると画面分割や複数のタブでターミナルを操作することができるようになります。 キーバインドに関する設定は以下のようにしています。
# prefixキーをCtrl-qに変更 set -g prefix C-s # C-bのキーバインドを解除 unbind C-b ## ペインのキーバインド #prefix + c で新しいウィンドウを開く bind c new-window -c '#{pane_current_path}' # prefix+\でペインを垂直分割する bind \\ split-window -h -c '#{pane_current_path}' # prefix+-でペインを水平分割する bind - split-window -v -c '#{pane_current_path}' # prefix+r で設定のリロード bind r source-file ~/.tmux.conf \; display "Reloaded!"
tmuxのコマンドに関してはこちらの記事が簡潔にまとまっていました。
複数ウィンドウを開いて作業
prefix + c
で新しいウィンドウを開くprefix + n
とprefix + p
でウィンドウを切り替える。
画面分割して作業
prefix + \
で縦分割もしくはprefix + -
で横分割prefix + 矢印キー
で画面を移動
マウス操作
設定でマウス操作を有効にしておくと、右クリックで下のようなウィンドウが表示されて画面分割などの操作が行えます。
メリット
- 画面分割と複数ウィンドウの好きな方法で操作ができる
デメリット
- デフォルトのキーバインドがやや打ちづらい
- 分割した画面を移動するときに矢印キーを打つのが面倒(設定でどうにかできるかも)
vimのターミナル機能を使う
vimのターミナル機能はオプションで、対応しているかどうかはecho has('terminal')
の結果が1かどうかで判断することができます。対応してなかったら最新版のvimを入れ直したらできるようになるかも。
vim ターミナルの公式ドキュメント: terminal - Vim日本語ドキュメント
neovim ターミナルの公式ドキュメント: Nvim documentation: nvim_terminal_emulator
起動
:term
もしくは:terminal
で起動できます。
ターミナルを開くときの分割方法やシェルの種類を指定することができます。
コマンド | 意味 |
---|---|
:vert term | 垂直分割 |
:bo term | 水平分割して下でターミナル起動 |
:top term | 水平分割して上でターミナル起動 |
:term bash | bashを起動 |
操作方法
vimのターミナルには、ファイル操作の時のようにnormalモードとtarminalモードが存在します。 ただし、neovimではなくノーマルのvimの場合、tarminalモードを基本として操作することになっているため画面移動などはtarminalモードのまま行えます。
モード変更
normal -> tarminal | insert -> tarminal |
---|---|
i もしくは a | Ctrl-\ + Ctrl-n |
insertモードからtarminalモードに移行するためのコマンドがかなり押しづらいので、使いやすいようにキーマッピングした方がいいと思います。
自分の場合は、jj
でノーマルモードに移行できるようにしています。
tnoremap <silent> jj <C-\><C-n>
設定
vimrc
やinit.vim
などを編集してターミナルを使いやすいように設定することが可能です。
自分はこちらの記事を参考にしました。Neovim内でのターミナル利用を快適にするVimscript - Kotaro7750's diary
また、neovimには:terminal
コマンドをラップしたneotermというプラグインがあるようで、こちらを導入してもいいかもしれません。(自分は使っていないです)
neotermのリポジトリはこちら github.com
vimのターミナルまとめ
vimのターミナル機能については設定をいじらないと快適に使えないと思うので少しハードルが上がると思います。 ただ、ターミナルを開きつつvimのコマンドも使えるのでできることはかなり広がります。
例えば、こちらの記事の記事で紹介されているようにvimのプラグインを使用してman
コマンドの出力を日本語訳するのは便利だと思いました。
個人的ターミナル運用方法
自分のターミナルの運用方法としては、
- 基本はtmuxの複数ウィンドウを開き、neovimの編集画面とターミナルの操作画面で使い分け
- ターミナルとファイルを同時に見たいときはneovimのターミナルを起動する
となっています。なぜこうしているかは、
- 画面いっぱいでファイル編集を行いたい。
- 一回開いたターミナルバッファがどこにあるか分からなくなる。
といった理由があるのですが、設定次第でneovimのターミナルがかなり使いやすくなるのでneovimのターミナルをもっと使用していきたいと思っています。