我经常使用vim,并且经常发现使用!bash
进入命令行非常有用。
但是,我需要输入exit
才能返回vim,有时我不确定我是否在子shell中,或者是否会关闭我的会话。
我真正想做的是输入类似!bash -prompt "subshell"
的内容,以便我得到这样的内容:
subshell$ <commands go here>
这可能吗?
答案 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。:!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 .bashrc的triplee来自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
错误,就是这样。
这并不是专门回答您的问题,而是解决了问题。