Время от времени, работая над несколькими проектами и / или чем-либо другим, у меня остается (слишком) много экземпляров Vim - как это бывает, я открываю файл, который уже открыт в другом месте, оставляя мне возможность:
[O]pen Read-only, (E)dit anyway, (R)ecover, (Q)uit, (A)bort
Есть ли какой-нибудь встроенный способ поднять экземпляр, как в GUI / терминал, содержащий открытый файл? Идеально выводит файл на передний план (если несколько буферов).
На данный момент я использую сценарий bash, который извлекает PID из свопа, проверяет, принадлежит ли этот PID к Vim, и если да, то использует его wmctrl
для вызова окна. Хотя это работает нормально, по крайней мере, для GUI и в Linux X11, я спрашиваю, есть ли более родной способ.
Ответы:
Одним из решений будет использование одного экземпляра vim для каждого проекта, что предотвратит эту проблему, если в ваших проектах не будут перекрывающиеся файлы.
Я собираюсь предположить, что вы ищете автоматизированное решение, а не предложение по изменению вашего поведения.
Существует возможность другого решения в FocusLost , более родного для vim.
Событие автокоманды FocusLost работает в графическом интерфейсе Vim и в некоторых консольных терминалах. Вы можете вместо переключения на файл в версии vim, которая открыта (которая, если вы используете несколько окон с графическим интерфейсом, является грязной), сохранить любые изменения, которые не были записаны в другом экземпляре vim, не будут потеряны (a отделите ветку git, сохраните, затем отмените, чтобы она была в дереве отмен, или просто сохраните ее) и откройте ее в новом экземпляре с указанием того, что он был открыт ранее.
Другое потенциально полезное событие автокоманды , доступное в vim 7, - это SwapExists , который указывает, что для файла существует файл подкачки, т.е. он открыт.
Если вы сохранили все в tmux или screen, возможно, есть способ переключиться на соответствующее окно / панель.
Краткий поиск в github также вызывает https://github.com/lynnard/editexisting.vim, который работает для определенных оконных менеджеров, таких как Xmonad.
источник
Давно потеряно и почти забыто.
Имеется в виду, чтобы повторно фактор кода и т. Д., Но пост, как есть. Этот код используется в 32-битной системе. Не уверен, как он будет себя вести на 64-битной (или другой).
Также есть где-нибудь взломать C-код (извлечение PID).
Оставьте это как сообщение для любого, чтобы взломать и настроить. Мой текущий скрипт в целом (используя его
pid
как опцию, он должен работать на любом графическом интерфейсе, учитывая его «GUI-PID / Program» и использованиеwmctrl -l -p
и так далее):источник