5

Я использую OS X. В vim, если вы выполните команду :sh , вы можете перейти в оболочку для выполнения команд. Я постоянно забываю, нахожусь ли я в этой оболочке или нет.

Есть ли способ проверить, не вхожу ли я в оболочку от vim?

4 ответа4

15

env | grep vim перечисляет переменные среды, которые vim передает в вашу оболочку. Я сомневаюсь, что VIMRUNTIME определен, если вы не запустили свою оболочку из vim.

5

Я ps (без каких-либо опций) и вижу, указан ли vim.

0

Вы можете использовать MacVim (http://code.google.com/p/macvim/). Независимо от того, пришла ли ваша оболочка из экземпляра vim, становится совершенно очевидно, что ваша оболочка находится в окне MacVim, а не в окне терминала.

0

Вы можете посмотреть имя команды родительского процесса оболочки: 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

Вы также можете быть заинтересованы в некоторых дискуссиях о том, как узнать «уровень» оболочек, в которых я нахожусь? ,

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .