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