viコマンド:shからシェルにいることをどのように確認しますか?


9

viでは、:shコマンドでシェルターミナルを取得できます。そして後で、exitシェルでviに戻ることができます。

しかし、シェルターミナルを長期間使用していて、exit何かを閉じるか、viを返すかを忘れてしまった場合。

viに戻るかどうかを確認する方法はありますか?jobsまたは機能しfgていません。


3
私は何年も前に:shコマンドの使用をやめました。Vimが起動する別のシェルの問題と、それに戻ることができないためです。代わりに、Vimをバックグラウンド(ctrl-z)に配置して、通常のシェルに戻しました。通常のシェルからVimに戻るのは、bashジョブ制御関数を使用すると簡単です。
bsnyder

回答:


8

通常のシェルでは:

$ env | grep -i vim
EDITOR=vim

使用後 :shell

$ env | grep -i vim
EDITOR=vim
VIMRUNTIME=/usr/share/vim/vim80
VIM=/usr/share/vim
MYVIMRC=/home/martin/.vim/vimrc

Vimが設定されますようだから、見えるVIMRUNTIMEVIMと、MYVIMRC環境変数を。それらのうち、VIM私にとって最も信頼できるようです(vimrcもvimランタイムもない場合があります)。

独自の環境変数を設定することもできます。

:let $HELLO = "test"
:shell
$ echo $HELLO
test

これは、編集中のバッファに関する情報を伝えるのに特に役立ちます。例えば:

:let $VIM_FILETYPE = &filetype
:let $VIM_FILENAME = expand('%:p')

次のように表示されます:

VIM_FILETYPE=go
VIM_FILENAME=/home/martin/a.go

3

通常のシェルセッションではなく、vim ":sh"であるかどうかを示す赤い "+"記号を追加するようにコマンドプロンプトを設定しました。その基本は、「$$」が現在のプロセスのPIDであることです。

MY_PPID=$(ps --no-header -o ppid -p $$)          # Gets the pid of the parent
                                                 # process.
MY_PCMDLINE=$(ps --no-header -o cmd -p $MY_PPID) # Gets its command line.
MY_CMDDASH=$(awk '{print $1}' <<<$MY_PCMDLINE)   # Gets the command name, possibly
                                                 # with a preceding hyphen.
MY_CMD=${MY_CMDDASH#-}                           # Get the bare command name.

これができたら、「。bashrc」などで使用するために説明したようなものを簡単にインライン化して構築できます。

:他の場所で説明されている環境変数($ VIM)メソッドはこれよりも優れているように見えますが、(vimだけでなく)何かの子プロセスであるかどうかを識別するために機能するので、これは残しておきます。


1
Vimは起動するシェルの環境に:shMYVIMRC、VIM、VIMRUNTIMEの3つの変数を入れます。Vimのサブシェルで実行していることを知るために必要なことは、それらの存在をテストすることだけです。
garyjohn

2

実行ps、またはそれ以上ps -fH。例:

$ ps -fH
UID        PID  PPID  C STIME TTY          TIME CMD
garyjohn 31140 31139  0 10:26 pts/11   00:00:00 bash
garyjohn 31267 31140  2 10:26 pts/11   00:00:00   vim hello.txt
garyjohn 31271 31267  0 10:26 pts/11   00:00:00     /bin/bash
garyjohn 31332 31271  0 10:26 pts/11   00:00:00       ps -fH

ps -fHだけを使用する利点psは、自分がサブシェルにいるかどうか、vimまたはvimバックグラウンドにいるかどうかを確認できることです。その場合、次のps -fHようになります。

$ ps -fH
UID        PID  PPID  C STIME TTY          TIME CMD
garyjohn 31140 31139  0 10:26 pts/11   00:00:00 bash
garyjohn 31267 31140  0 10:26 pts/11   00:00:00   vim hello.txt
garyjohn 31924 31140  0 10:29 pts/11   00:00:00   ps -fH
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.