Quantcast
Channel: Vimタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 5657

vimをちょっと便利にするクライアントサーバー機能

$
0
0

概要

vimのterminalでシェルを開いたとき、その中でさらにvimを開いてしまって困ることはありませんか?

ng.gif

これはterminalのbashの中でさらにvimを開いている状態ですので、
レジスタもバッファも別のものになります

setumei.png

pstreeで表示するとこんな感じ

 `-vim memo.md
     `-bash
         `-vim hoge.md

vimのクライアントサーバー機能を使うと一つのvimにまとめることが出来ます
(gvimを使った事がある人は「既存のvimで開く」みたいなメニューがあると思うのでイメージしやすいかと思います)

ok.gif

terminal内開いたvimが既存のvimタブで表示されています

設定

この機能はXサーバーの機能を使いますので, vim-gtkをインストールします
(今回はUbuntu20.04でやってみました)

sudo apt install vim-gtk 

Xサーバーが既に走っているなら問題ないですが、無い場合はxvfb等でxserverだけ上げます

sudo apt install xvfb
sudo bash -c "curl -L https://git.io/JfDyE > /etc/systemd/system/xvfb.service"

# User, Groupを適宜変更
sudo vi /etc/systemd/system/xvfb.service

sudo systemctl enable xvfb
sudo systemctl start xvfb

bashrc に 以下のようなaliasを追加します

alias vim="DISPLAY=:1 vim --servername vim1 --remote-tab-silent"

この設定を入れると、tmux等で開いた新しいシェル内で起動したvimもまとめる事ができます

以下のコマンドで, VIM1というサーバーが見えると思います

# aliasを解除するために、バックスペースを付けてvimを実行しています
\vim --serverlist

その他詳しいことはvimのヘルプを参照ください

:h client-server

その他

vim内のシェルに限定すれば、terminal apiを使っても出来ると思います
開いたターミナル側から、親のvimに対して命令が出せる機能です
ファイルを開くときに、カレントディレクトリの情報が伝わらないので、フルパスで指定しないといけないかもしれませんが手軽に出来るかと思います
詳しくはヘルプを参照してください

:h terminal-api

vim から開いたコンソールには $VIM_SERVERNAME, $VIM_TERMINALという変数が設定されます
tmuxから開かれたシェルは既存のvimにまとめたくない場合などは、こちらの変数を見て分岐するといいかもしれません
以下のような設定で親のvimで開くことができます

alias vim="DISPLAY=:1 vim --servername $VIM_SERVERNAME --remote-tab"

Viewing all articles
Browse latest Browse all 5657

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>