Vim:在shell转义时更改提示

时间:2013-10-01 15:49:57

标签: shell vim

我在vim中编辑文件时经常使用:sh,这样我就可以在返回编辑文件之前执行git提交等小任务。但是,有时我会对我的终端模拟器是否启动shell或者它是作为vim子shell启动而感到困惑,因此在提示符下键入exit总是冒着意外关闭终端模拟器的风险而不是回到我的vim编辑会话。有没有办法让vim修改我的提示,可能是$PS1环境变量,当我从vim启动一个shell时,我知道我是否在vim启动的子shell中?

4 个答案:

答案 0 :(得分:8)

执行:sh时,可以使用一些其他特定于Vim的shell变量。在这台机器上,我有:

$MYVIMRC
$VIM
$VIMRUNTIME

例如,您可以在$VIM文件中使用*rc,如下所示:

if [ $VIM ]
then
  # set your vim-specific PS1 here
else
  # set your normal PS1 here
fi

奖励:在GVim / MacVim中,当你:sh时得到的伪终端无法显示颜色。因为Vim将其导出为dumb,你可以使用与上面相同的逻辑在GVim / MacVim中使用单色提示并在shell中使用颜色提示:

if [ $TERM == 'dumb' ]
then
  # no colors
else
  # colors
fi

答案 1 :(得分:3)

你需要创建一个rc文件来设置一个不同的$ PS1,然后像这样在vim中找到它

set shell=/bin/bash\ --rcfile\ ~/.bashforvimrc

点击http://nothingtobedoneforall.wordpress.com/2007/02/25/setting-shell-prompt-for-vim/

来自Neatu Qvidiu Gabriel的评论更新,

最好在分配给PS1之前执行source~ / .bashrc。因为否则会丢失bashrc中所有预定义的配置

答案 2 :(得分:0)

我使用这两个函数,一个用于git(总是打开),一个用于vim(在shell中生成时可见:sh):

parse_git_branch() {
    git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ (\1)/'
}
is_vim_sh() {
    if [ "x$VIM" != "x" ]; then
        echo " [vim]"
    fi
}
export PS1="\u@\h\[\033[32m\]\w\[\033[33m\]\$(parse_git_branch)\[\033[00m\]\$(is_vim_sh)$ "

答案 3 :(得分:0)

谈到GVim / MacVim,:h guioptions now support以下标志:

  '!'   External commands are executed in a terminal window.  Without
        this flag the MS-Windows GUI will open a console window to
        execute the command.  The Unix GUI will simulate a dumb
        terminal to list the command output.
        The terminal window will be positioned at the bottom, and grow
        upwards as needed.

设置:set go+=!,在GVim / MacVim中运行:sh,并感到惊讶:)。