私は vim をよく使用しますが、!bash
. ただし、exit
vim に戻るには入力する必要があり、サブシェルにいるのか、それともセッションが閉じられるのかがわからないことがあります。
私が本当にやりたいのは、次のようなものを入力して、次のような!bash -prompt "subshell"
ものを取得することです。
subshell$ <commands go here>
これは可能ですか?
私は vim をよく使用しますが、!bash
. ただし、exit
vim に戻るには入力する必要があり、サブシェルにいるのか、それともセッションが閉じられるのかがわからないことがあります。
私が本当にやりたいのは、次のようなものを入力して、次のような!bash -prompt "subshell"
ものを取得することです。
subshell$ <commands go here>
これは可能ですか?
これを行う最も直接的な方法は、PS1
vim 内で環境変数を設定することです。
:let $PS1="subshell$ "
:shell
の代わりにコマンドを使用してサブシェルを起動します:!bash
。
$
記号を使用するとlet
、環境変数が変更されます。これを.vimrcに追加して、設定を永続化します。
または、シェル オプションを使用して、引数を含むより具体的なコマンドを指定でき:shell
ます。およびを参照してください。help shell
help 'shell'
そう:
:set shell=bash\ --rcfile\ ~/.vimbashrc
.vimbashrcに を追加し、代わりに を使用してサブシェルPS1="subshell "
を呼び出します。これを.vimrcに追加して、設定を永続化します。:shell
!bash
したがって、次の 2 つのオプションがあります。
let $PS1="subshell "
し、代わりに を使用してサブシェルを開始します。:shell
:!bash
PS1="subshell "
を変更します。shell
set shell=bash\ --rcfile\ ~/.vimbashrc
最後に、サブシェル:!bash
を起動するために を使用する必要がある場合は、さらにいくつかのオプションがあります。を使用して、より具体的なコマンドラインを渡すこともできることに注意してください!
。
:PS1="subshell$ " bash
動作するはずです。:!bash\ --rcfile\ ~/.vimbashrc
、上記のように.vimbashrcに設定PS1
しますただし、これらを毎回入力するか、マッピングを定義する必要があります。
ここでは、シェル変数を使用$SHLVL
することも別のオプションのようです。あなたのを追加$SHLVL
してください$PS1
:
export PS1="$PS1 $SHLVL"
したがって、プロンプトは次のようになります。
[tim@RackAblade47 ~]$ 2
VIMからシェルを起動すると、$SHLVL
増加します:
[tim@RackAblade47 ~]$ 4
元の質問に答えるには、Vim 内で次のように言うことができます。
:!VIMPROMPT="(vim) " bash
プロンプトを(おそらく.bashrcで)次のように変更します
PS1='\u@\h:\w\$ '
に
PS1='$VIMPROMPT\u@\h:\w\$ '
これにより、プロンプトがから変更されます
me@host:~$
に
(vim) me@host:~$
Vim 内で実行する場合。
はい - コマンドを実行する前にシェル内でプロンプトを変更できます
PS1="サブシェル"
すべてのオプションについては、このガイドをチェックしてください http://www.linuxselfhelp.com/howtos/Bash-Prompt/Bash-Prompt-HOWTO-2.html
本当に bash コマンドで実行する必要がある場合は、「--rcfile」を使用して、PS1 コマンドを実行する RC ファイルを指定できます (通常、PS1= 行を .bashrc に入れて、ログイン時のプロンプトをカスタマイズします)。
個人的に使ってます
case $(ps $PPID) in *vim|*bash)
PS1="$(ps $PPID | awk '{print $NF}' | sed 1d) $PS1" ;;
esac
私の .bashrcをソースとするプロンプトスクリプトで、トリプルのコメントから取得しました。
これを.bashrc
既存のPS1=
ステートメントの後に入れます。
if ps | grep -q vim; then
export PS1="[VIM]$PS1"
fi
Ubuntu でテスト済み。
CTRL+Z でバックグラウンドに送り、コマンドで戻すことができますfg
。jobs
停止したすべてのジョブが表示されます。
これは、vim の複数のインスタンスを並行して持つことができ、どのインスタンスを戻すかを選択できるということでした。実行されていない場合は、no current job
エラーが発生するだけです。
これはあなたの質問に明確に答えるものではありませんが、その下の問題に対処します。