はじめに
よくありがちかつ初歩的ですがviやvimからshellにもどって何かを実行したいときのメモ、
そして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^)/