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

时间:2012-09-05 01:31:03

标签: bash vim command-line

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

我真正想做的是输入类似!bash -prompt "subshell"的内容,以便我得到这样的内容:

subshell$ <commands go here>

这可能吗?

8 个答案:

答案 0 :(得分:9)

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

:let $PS1="subshell$ "

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

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

或者,使用:shell 可以使用 shell选项指定更具体的命令,包括参数,请参阅help shell和{{ 1}}。

所以:

help 'shell'

.vimbashrc 中添加:set shell=bash\ --rcfile\ ~/.vimbashrc ,并使用PS1="subshell "而不是:shell调用子shell。将其添加到 .vimrc 以保留设置。

所以你有两个选择:

  • !bash添加到 .vimrc ,然后使用let $PS1="subshell "代替:shell启动子shell。
  • 为您的vim子shell创建自定义rc文件,向其添加特定的:!bash,并修改 .vimrc 中的PS1="subshell "选项:{{1 }}。

最后,如果必须使用shell启动子shell,还有几个选项。请注意,您还可以使用set shell=bash\ --rcfile\ ~/.vimbashrc传递更具体的命令行,例如:

  • :!bash应该有用。
  • !,并在 .vimbashrc 中设置:PS1="subshell$ " bash,如上所述

但是你需要每次都输入 ,或者为它定义一个映射。

答案 1 :(得分:5)

使用shell变量$SHLVL似乎是另一种选择。在$SHLVL中添加$PS1

export PS1="$PS1 $SHLVL"

所以你的提示符如下:

[tim@RackAblade47 ~]$ 2

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

[tim@RackAblade47 ~]$ 4

答案 2 :(得分:1)

是 - 您可以在运行命令之前更改shell内的提示

PS1 = “壳层”

查看本指南,了解所有选项http://www.linuxselfhelp.com/howtos/Bash-Prompt/Bash-Prompt-HOWTO-2.html

如果您真的必须通过bash命令执行此操作,您可以使用'--rcfile'指定一个为您运行PS1命令的RC文件(通常将PS1 =行放在您的.bashrc中以在登录时自定义提示)

答案 3 :(得分:1)

要回答你原来的问题,你可以在Vim里面说:

:!VIMPROMPT="(vim) " bash

并改变你的提示(在你的.bashrc中,大概是)

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

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

这会改变你的提示

me@host:~$ 

(vim) me@host:~$ 

如果在Vim内部运行。

答案 4 :(得分:0)

我个人正在使用

case $(ps $PPID) in *vim|*bash)
  PS1="$(ps $PPID | awk '{print $NF}' | sed 1d) $PS1" ;;
esac
prompt script来自my .bashrctriplee来自comment的{{3}}。

答案 5 :(得分:0)

通过检查在vim中导出的MYVIMRC变量,我已经能够更改vim子shell过程的提示,然后将相应地更新PS1。我用以下内容更新了.bashrc文件。

PS1='\$ '
# when in vim subshell change PS1 for clarity
if [[ $MYVIMRC ]]; then PS1='>> '; fi;

答案 6 :(得分:-1)

在任何现有.bashrc语句之后将其放在PS1=中。

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

在Ubuntu上测试过。

答案 7 :(得分:-2)

您可以使用CTRL + Z将其发送到后台,然后使用fg命令将其恢复。使用jobs,您可以看到已停止的所有工作。

这是你可以并行拥有多个vim实例,并选择你要带回的那个实例。如果没有运行,您将收到no current job错误,就是这样。

这并不是专门回答您的问题,而是解决了问题。