tweeeetyのぶろぐ的めも

アウトプットが少なかったダメな自分をアウトプット<br>\(^o^)/

【vi】viやvimを一時停止してshellに戻る - からのviから抜けたシェルであることをわかりやすくする

はじめに

よくありがちかつ初歩的ですがviやvimからshellにもどって何かを実行したいときのメモ、
そしてviやvimからshellに戻ったことをわかりやすくしたいというメモです。

ながれ

  1. vi/vimからshellに戻る、shellからvimに戻る方法いくつか
  2. vi/vimからshellに戻っている中か確認する
  3. vi/vimからshellに戻っているコトをわかりやすくする

1. vi/vimからshellに戻る、shellからvimに戻る方法いくつか

いくつかと書いてますが大きく下記の2点があります。

  • :(コロン)コマンドで戻る
  • バックグラウンド/フォアグラウンドで戻る

:(コロン) コマンドで戻る

コマンドモード中に :shellまたは:shでshellに戻ることができます。
:shでshellに戻り、shellからviに戻りたい場合はexitを実行します。

次に説明するバックグラウンド/フォアグラウンドもありますが基本的にはこちらの方法のほうが良いかと思います。

バックグラウンド/フォアグラウンドで戻る

これはviに限った話しではありませんが、
ctrl + zで実行中のプログラムを一時停止することができます。
vi起動中にctrl + zでshellに戻り、shellからviに戻りたい場合はfgコマンドで戻ります。

ctrl + zで実行中のプログラムを一時停止し(バックグラウンド化し)できるのは
viだけでなく他のプログラムも複数可能なため、複数いる場合はjobsコマンドで確認してjob番号を指定します。

バックグラウンド/フォアグラウンドに関してはこちらをご参考に

2. vi/vimからshellに戻っている中か確認する

ここからは:shell:shで一時停止した場合のはなしです。

viからshellは前述の通りですが、shellからviの場合にexitを打ちますが
ときたまviからshellに戻ってない状態で打ってしまうとターミナル自体が終了してしまうことがあります。

ということで、exitを打つ前にviからshellに戻った状態かどうかを確認する方法です。
これはVIMまたはVIMRUNTIMEという環境変数を確認します。

通常時の(vimから戻るとか何もしてない)環境変数

何もしていない場合におもむろに打ってみると何も出力されません。

$ echo ${VIM}

$ echo ${VIMRUNTIME}
vimからshellに戻っている場合の環境変数

vimからshellに戻っている場合に環境変数を出力すると値が入っています。
これにより見分けます。

# 適当なファイルを開く
$ vi test.txt

# :sh コマンドでshellに戻る
$ echo ${VIM}
/usr/share/vim

$ echo ${VIMRUNTIME}
/usr/share/vim/vim73

3. vi/vimからshellに戻っているコトをわかりやすくする

こちらは下記のサイトを参考にさせて頂きました!thx!!
* vim から :shell で抜けたときにわかりやすくする

上記の変数を使ってシェルの設定を変更します。

ということで .bashrc に追加編集。
やることは簡単で変数があったときにシェルのプロンプトを変更してやります。

# .bashrcに追記します
[~ 00:06:50]$ vi ~/.bashrc
---- vi追記 ----
[[ -n "$VIMRUNTIME" ]] && \
    PS1='(VIM) \W \t $ '
---------------

# viから抜けてshellに戻った状態じゃないことを確認
[~ 00:06:57]$ echo $VIM

# 適当なファイルをviで開く
[~ 00:07:57]$ vi test.txt 

# :sh コマンドで抜ける 
(VIM) ~ 00:08:04 $ 

ということでviから抜けてshellに戻った場合は (VIM)という文字がつくようになりました。

おわり

抜けたときにわかりにくいんだよなーと思っていましたが思ったより簡単にできました。
参考にさせて頂いた記事さんありがとうございます\(^o^)/