Как проверить, находится ли он в режиме оболочки Vim - PullRequest
5 голосов
/ 27 марта 2012

В vim введите : sh переключится на оболочку, а exit может выйти из оболочки и вернуться к vim.Есть ли команда, чтобы проверить, находится ли она в режиме оболочки vim?Так что я не буду случайно vim, чтобы открыть тот же файл снова.Я хочу избежать сценария ниже:

vim myfile > :sh > exit > vim myfile // получить предупреждение о том, что другой экземпляр vim редактирует тот же файл

Это нормальный сценарий:
vim myfile > :sh > exit // keepредактирование
vim myfile > :wq > vim myfile // продолжить редактирование

Ответы [ 2 ]

3 голосов
/ 27 марта 2012

В дополнение к ответу @ a3nm, вы можете

  1. использовать pstree -h: оно выведет дерево процессов с выделенной текущей веткой, и все, что вам нужно проверить, - есть ли vim ввыделение.
  2. Другая возможность - ps t: она покажет все процессы, использующие текущий терминал, и должна отображать vim в списке, когда вы находитесь внутри :sh.ps -oargs t может быть более полезным, если вам нужны аргументы, с которыми вы запускали vim.

Эти методы более надежны, поскольку переменные окружения VIMRUNTIME, VIM и MYVIMRC могут быть переопределенывами для выполнения некоторых настроек (кстати, они определены vim для использования в vimscripts, а не :sh).Они также работают для других процессов, которые позволяют запускать подоболочку, но не определяют никаких переменных среды.

Я бы также предложил рассмотреть возможность использования <C-z> в обычном режиме или :suspend / :stop вEx, потому что они используют оболочку vim, которая была запущена вместо создания новой.Это поведение дает вам доступ к истории команд, которые вы ввели перед запуском vim, а также дает вам возможность писать более сложную и трудоемкую конфигурацию оболочки без необходимости каждый раз ждать.

В случае использования <C-z> обоихметоды все еще работают, но первый метод не будет выделять vim, потому что он будет на том же уровне (имеет того же родителя), что и сам pstree, вероятно, чуть ниже или выше pstree на графике.Это также включает третий метод: jobs встроенная оболочка.

Для восстановления из <C-z> вы должны использовать fg (также работает один % в zsh и bash), который меньше набиратьзатем exit (но более <C-d>).

3 голосов
/ 27 марта 2012

Команда :sh в vim, похоже, определяет переменные окружения VIMRUNTIME, VIM и MYVIMRC, поэтому вы можете просто проверить, определены ли они.Для этого, например, вы можете запустить echo $VIM, который должен вернуть пустую строку в обычной оболочке и что-то вроде /usr/share/vim в оболочке, запущенной из vim.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...