我经常:sh
在 vim 中编辑文件时使用,这样我就可以在返回编辑文件之前执行 git 提交等小任务。但是,有时我会混淆我的 shell 是由终端仿真器启动还是作为 vim 子 shell 启动,因此exit
在提示符下键入总是冒着意外关闭终端仿真器的风险,而不是回到我的 vim 编辑会话。当我从 vim 启动 shell 时,有没有办法让 vim 修改我的提示符,也许是通过$PS1
环境变量,以便我知道我是否在由 vim 启动的子 shell 中?
问问题
1764 次
4 回答
9
当你这样做时: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
于 2013-10-01T19:41:18.683 回答
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 中的所有预定义配置
于 2013-10-01T15:55:11.787 回答
0
我使用这两个函数,一个用于 git(始终打开),一个用于 vim(在由 :sh 生成的 shell 中可见):
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)$ "
于 2017-02-23T09:54:04.727 回答
0
说到 GVim/MacVim,:h guioptions
现在支持以下标志:
'!' 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+=!
,:sh
在 GVim/MacVim 中运行,然后感到惊讶 :)。
于 2019-03-06T08:11:59.743 回答