5

私は vim をよく使用しますが、!bash. ただし、exitvim に戻るには入力する必要があり、サブシェルにいるのか、それともセッションが閉じられるのかがわからないことがあります。

私が本当にやりたいのは、次のようなものを入力して、次のような!bash -prompt "subshell"ものを取得することです。

subshell$ <commands go here>

これは可能ですか?

4

8 に答える 8

9

これを行う最も直接的な方法は、PS1vim 内で環境変数を設定することです。

:let $PS1="subshell$ "

:shellの代わりにコマンドを使用してサブシェルを起動します:!bash

$記号を使用するとlet、環境変数が変更されます。これを.vimrcに追加して、設定を永続化します。

または、シェル オプションを使用して、引数を含むより具体的なコマンドを指定でき:shellます。およびを参照してください。help shellhelp 'shell'

そう:

:set shell=bash\ --rcfile\ ~/.vimbashrc

.vimbashrcに を追加し、代わりに を使用してサブシェルPS1="subshell "を呼び出します。これを.vimrcに追加して、設定を永続化します。:shell!bash

したがって、次の 2 つのオプションがあります。

  • .vimrcに追加let $PS1="subshell "し、代わりに を使用してサブシェルを開始します。:shell:!bash
  • vim サブシェル用のカスタム rc ファイルを作成し、それに固有のものを追加して、 .vimrcのオプションPS1="subshell "を変更します。shellset shell=bash\ --rcfile\ ~/.vimbashrc

最後に、サブシェル:!bashを起動するために を使用する必要がある場合は、さらにいくつかのオプションがあります。を使用して、より具体的なコマンドラインを渡すこともできることに注意してください!

  • :PS1="subshell$ " bash動作するはずです。
  • :!bash\ --rcfile\ ~/.vimbashrc、上記のように.vimbashrcに設定PS1します

ただし、これらを毎回入力するか、マッピングを定義する必要があります。

于 2012-09-05T01:38:42.180 に答える
5

ここでは、シェル変数を使用$SHLVLすることも別のオプションのようです。あなたのを追加$SHLVLしてください$PS1

export PS1="$PS1 $SHLVL"

したがって、プロンプトは次のようになります。

[tim@RackAblade47 ~]$ 2

VIMからシェルを起動すると、$SHLVL増加します:

[tim@RackAblade47 ~]$ 4
于 2012-09-05T06:18:24.553 に答える
1

元の質問に答えるには、Vim 内で次のように言うことができます。

:!VIMPROMPT="(vim) " bash

プロンプトを(おそらく.bashrcで)次のように変更します

PS1='\u@\h:\w\$ '

PS1='$VIMPROMPT\u@\h:\w\$ '

これにより、プロンプトがから変更されます

me@host:~$ 

(vim) me@host:~$ 

Vim 内で実行する場合。

于 2012-09-05T02:39:26.510 に答える
1

はい - コマンドを実行する前にシェル内でプロンプトを変更できます

PS1="サブシェル"

すべてのオプションについては、このガイドをチェックしてください http://www.linuxselfhelp.com/howtos/Bash-Prompt/Bash-Prompt-HOWTO-2.html

本当に bash コマンドで実行する必要がある場合は、「--rcfile」を使用して、PS1 コマンドを実行する RC ファイルを指定できます (通常、PS1= 行を .bashrc に入れて、ログイン時のプロンプトをカスタマイズします)。

于 2012-09-05T01:35:15.997 に答える
0

個人的に使ってます

case $(ps $PPID) in *vim|*bash)
  PS1="$(ps $PPID | awk '{print $NF}' | sed 1d) $PS1" ;;
esac

の .bashrcをソースとするプロンプトスクリプトで、トリプルコメントから取得しました。

于 2013-04-04T10:47:04.390 に答える
-1

これを.bashrc既存のPS1=ステートメントの後に入れます。

if ps | grep -q vim; then
  export PS1="[VIM]$PS1"
fi

Ubuntu でテスト済み。

于 2012-09-05T01:56:03.583 に答える
-2

CTRL+Z でバックグラウンドに送り、コマンドで戻すことができますfgjobs停止したすべてのジョブが表示されます。

これは、vim の複数のインスタンスを並行して持つことができ、どのインスタンスを戻すかを選択できるということでした。実行されていない場合は、no current jobエラーが発生するだけです。

これはあなたの質問に明確に答えるものではありませんが、その下の問題に対処します。

于 2013-02-04T13:04:13.100 に答える