是否可以使用命令行选项指定bash提示符?

vol*_*evo 5 vim bash command-line

我经常使用vim,并且经常发现使用它进入命令行非常有用!bash.但是,我需要键入exit以返回到vim,有时我不确定我是否在子shell中或者是否会关闭我的会话.

我真正想要做的是输入类似的东西!bash -prompt "subshell",我得到这样的东西:

subshell$ <commands go here>
Run Code Online (Sandbox Code Playgroud)

这可能吗?

pb2*_*b2q 9

最直接的方法是PS1在vim中设置环境变量:

:let $PS1="subshell$ "
Run Code Online (Sandbox Code Playgroud)

并使用命令:shell而不是启动子shell :!bash.

使用$符号let修改环境变量.将其添加到.vimrc以保留设置.

或者,使用:shell可以使用shell选项指定更具体的命令,包括参数,请参阅help shellhelp 'shell'.

所以:

:set shell=bash\ --rcfile\ ~/.vimbashrc
Run Code Online (Sandbox Code Playgroud)

.vimbashrc中添加PS1="subshell ",并使用:shell而不是使用调用子shell !bash.将其添加到.vimrc以保留设置.

所以你有两个选择:

  • 添加let $PS1="subshell ".vimrc,并使用:shell而不是使用启动子shell :!bash.
  • 为你的vim子shell创建一个自定义的rc文件,添加你的特定的rc文件PS1="subshell ",并修改.vimrc中shell选项:.set shell=bash\ --rcfile\ ~/.vimbashrc

最后,如果必须使用:!bash启动子shell,还有几个选项.请注意,您还可以使用更具体的命令行!,例如:

  • :PS1="subshell$ " bash 应该管用.
  • :!bash\ --rcfile\ ~/.vimbashrc,并PS1在上面的.vimbashrc中设置

但是,你需要这些输入每一次,或者为它定义的映射.

  • @RobertMays​​Jr如果您阅读了StackOverflow社区规则 - 明确希望upvoted答案尽可能有用.从其他人那里综合信息有助于实现这一目标.请记住,目标不仅仅是为自己获得尽可能多的积分,而是创建充当共享社区资源的知识库. (6认同)

lea*_*fei 5

使用shell变量$SHLVL似乎是另一种选择.加入$SHLVL你的$PS1:

export PS1="$PS1 $SHLVL"
Run Code Online (Sandbox Code Playgroud)

所以你的提示看起来像这样:

[tim@RackAblade47 ~]$ 2
Run Code Online (Sandbox Code Playgroud)

当你从VIM启动shell时,$SHLVL会增加:

[tim@RackAblade47 ~]$ 4
Run Code Online (Sandbox Code Playgroud)