Я использую OS X. В vim, если вы выполните команду :sh
, вы можете перейти в оболочку для выполнения команд. Я постоянно забываю, нахожусь ли я в этой оболочке или нет.
Есть ли способ проверить, не вхожу ли я в оболочку от vim?
env | grep vim
перечисляет переменные среды, которые vim передает в вашу оболочку. Я сомневаюсь, что VIMRUNTIME
определен, если вы не запустили свою оболочку из vim.
Я ps
(без каких-либо опций) и вижу, указан ли vim.
Вы можете использовать MacVim (http://code.google.com/p/macvim/). Независимо от того, пришла ли ваша оболочка из экземпляра vim, становится совершенно очевидно, что ваша оболочка находится в окне MacVim, а не в окне терминала.
Вы можете посмотреть имя команды родительского процесса оболочки: ps -o comm= -p $PPID
. Например, вы можете изменить свое приглашение на включение идентификатора родительского процесса.
Кроме того, если вы хотите изменить приглашение только в оболочках, которые не работают непосредственно внутри эмулятора терминала, вы можете проверить это, проверив, совпадает ли управляющий терминал оболочки с его родительским процессом. Если родитель является эмулятором терминала, у него не будет собственного терминала в качестве управляющего терминала.
Например, если вы поместите следующие строки в ваши ~/.kshrc
или ~/.bashrc
или ~/.zshrc
(выберите подходящую для вашей оболочки), ваше приглашение начнется с {vim}
если оболочка работает под vim
:
parent_command=$(ps -o comm= -p $PPID)
parent_command=${parent_command##*/}
if [ "$(ps -o tty= -p $$)" = "$(ps -o tty= -p $PPID)" ]; then
# Not running directly under a terminal emulator
PS1="{$parent_command}$PS1"
fi
Вы также можете быть заинтересованы в некоторых дискуссиях о том, как узнать «уровень» оболочек, в которых я нахожусь? ,