VIM,当我使用 :!bash 进入 shell 提示符时,我希望命令提示符能够反映出我在 shell 中

VIM,当我使用 :!bash 进入 shell 提示符时,我希望命令提示符能够反映出我在 shell 中

最近我整天都在使用 vim 练习代码。很多时候,当我想从提示符下执行某些操作时,我会使用 :!bash 的键绑定并执行我需要执行的操作,然后键入 exit 返回我正在处理的 vim 脚本。

有时我会忘记自己是在 shell 中,需要四处寻找才能找到我的脚本。有没有办法设置它,以便我的提示符显示“vim $:”或类似内容?

我想我可以尝试创建一个.bashrc_for_vim并运行source .bashrc_for_vim或类似的东西,但这看起来很笨重。

这里有人找到一种优雅的方法来做到这一点吗?

答案1

Vim在 shell 中从或中设置VIMRUNTIME(和) 环境变量,因此您可以在 中通过这种方式检测它:VIM:sh:!bash.bashrc

if [ "$VIMRUNTIME" ]
then
    PS1="vim: $PS1"
fi

上述命令将在您现有的提示符前加上“vim: ”。您可以根据vim $:需要将其更改为其他内容,例如,只需 。将其放在文件末尾,这样您的正常提示符就已设置好,因此您可以使用它或替换它。

你不能做同样的事情,Ctrl-Z因为那真的返回到您的原始 shell - 这不是一个新会话,而是您vim最初启动的会话,因此它具有与您开始时相同的环境和设置。

答案2

我利用了$SHLVL环境变量,如下man bash所述

SHLVL  Incremented by one each time an instance of bash is started.

在我的~/.bashrc

# set a variable to reflect SHLVL > 1
if [[ $SHLVL -gt 1 ]] ; then
    export SUBSHELL="${SUBSHELL:+$SUBSHELL}+"
else
    export SUBSHELL=""

fi

我稍后会使用它来设置PS1每个级别添加一个“+”。

if [[ "$color_prompt" = yes ]]; then
#             chroot?                       Depth      green       user@host nocolor  :   green      $PWD  ref      (status) off   $ or # space             
    PS1='${debian_chroot:+($debian_chroot)}${SUBSHELL}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[1;31m\]($?)\[\033[00m\]\$ '
else
    PS1='${debian_chroot:+($debian_chroot)}${SUBSHELL}\u@\h:\w\$ '
fi
unset color_prompt force_color_prompt 

在使用中,它看起来像:

walt@bat:~(0)$ uptime
 22:57:48 up 2 days,  9:51,  2 users,  load average: 2.23, 0.75, 0.41
             # start a subshell, see the first "+" appear
walt@bat:~(0)$ bash
             # start a 2nd subshell, see the second "+" appear
+walt@bat:~(0)$ bash
             # Start vim, then do :!bash
++walt@bat:~(0)$ vim foo

             # here, underneath vim, look at the process tree leading to here
+++walt@bat:~(0)$ ps -fp$$
UID        PID  PPID  C STIME TTY          TIME CMD
walt      6803  6802  0 23:10 pts/21   00:00:00 bash
+++walt@bat:~(0)$ ps -fp$$,6802
UID        PID  PPID  C STIME TTY          TIME CMD
walt      6802  6732  0 23:10 pts/21   00:00:00 vim foo
walt      6803  6802  0 23:10 pts/21   00:00:00 bash
+++walt@bat:~(0)$ ps -fp$$,6802,6732
UID        PID  PPID  C STIME TTY          TIME CMD
walt      6732  6662  0 23:10 pts/21   00:00:00 bash
walt      6802  6732  0 23:10 pts/21   00:00:00 vim foo
walt      6803  6802  0 23:10 pts/21   00:00:00 bash
+++walt@bat:~(0)$ ps -fp$$,6802,6732,6662
UID        PID  PPID  C STIME TTY          TIME CMD
walt      6662  5932  0 23:10 pts/21   00:00:00 bash
walt      6732  6662  0 23:10 pts/21   00:00:00 bash
walt      6802  6732  0 23:10 pts/21   00:00:00 vim foo
walt      6803  6802  0 23:10 pts/21   00:00:00 bash
+++walt@bat:~(0)$ ps -fp$$,6802,6732,6662,5932
UID        PID  PPID  C STIME TTY          TIME CMD
walt      5932  5795  0 Jan29 pts/21   00:00:00 bash
walt      6662  5932  0 23:10 pts/21   00:00:00 bash
walt      6732  6662  0 23:10 pts/21   00:00:00 bash
walt      6802  6732  0 23:10 pts/21   00:00:00 vim foo
walt      6803  6802  0 23:10 pts/21   00:00:00 bash
+++walt@bat:~(0)$ ps -fp$$,6802,6732,6662,5932,5795
UID        PID  PPID  C STIME TTY          TIME CMD
walt      5795  5070  0 Jan29 ?        00:00:37 /usr/lib/gnome-terminal/gnome-terminal-server
walt      5932  5795  0 Jan29 pts/21   00:00:00 bash
walt      6662  5932  0 23:10 pts/21   00:00:00 bash
walt      6732  6662  0 23:10 pts/21   00:00:00 bash
walt      6802  6732  0 23:10 pts/21   00:00:00 vim foo
walt      6803  6802  0 23:10 pts/21   00:00:00 bash
                # now unwind, returning to vim
+++walt@bat:~(0)$ exit

                # back in vim, :q!
Press ENTER or type command to continue
                # unwind
++walt@bat:~(0)$ exit
                # unwind
+walt@bat:~(0)$ exit
               # back at the top level
walt@bat:~(0)$ : and I'm out

相关内容