Подтвердить что ты не робот

Перемещение буфера в vim через экземпляры vim

Можно ли это сделать?

Концептуально решение должно применяться во множестве возможных конфигураций, начиная от двух экземпляров vim, работающих в отдельных виртуальных терминалах в панелях в окне tmux, до отдельных терминалов на отдельных машинах в отдельных географических регионах, один или оба подключенных по сравнению с сетью (другими словами, vims размещаются двумя отдельными процессами оболочки, которые в любом случае будут находиться под tmux).

Случай, который побудил меня обдумать это:

У меня есть две панели tmux с открытым vim, и я хочу использовать Vim yank/paste для копирования файлов.

Но он работает только в том случае, если я их обоих запускаю в том же экземпляре Vim, поэтому я вынужден либо:

  • используйте функцию копирования/вставки tmux, чтобы получить содержимое (что несколько утомительно и сложно) или
  • используйте функцию копирования/вставки терминала (PuTTY, iTerm2), чтобы получить содержимое (что тоже утомительно, но не подвержено сетевой латентности, однако это работает только до определенного размера текстовой полезной нагрузки для копирования, в этот момент это метод не будет работать вообще из-за того, что терминал не знает содержимое невидимых в данный момент частей файла) или
  • потерять историю/контекст буфера Vim и, возможно, историю/контекст оболочки при повторном открытии файла вручную в одном из экземпляров Vim в разделенном буфере или вкладке, а затем закрытие другого терминального контекста (гораздо менее утомительно, чем 1 для больших полезных нагрузок, но тем более с небольшими полезными нагрузками).

Это немного PITA, и все можно избежать, если у меня есть предвидение переключиться на соответствующий терминал, уже запущенный vim, чтобы открыть мои файлы, но судьба рабочего процесса и привычки редко совпадают с тем, что было бы удобно,

Итак, возникает вопрос: существует ли какая-либо команда или возможность созданного straceforwardly (shell) script, который позволяет мне присоединяться к буферам через независимо исполняемые экземпляры vim? Мне трудно заставить Google ответить на это адекватно.

В отсутствие адекватного ответа (или если с достаточной уверенностью определено, что Vim не обладает функциями для выполнения переноса буферов по своим экземплярам), хорошая реализация (привязываемая к ключам) для подхода 3 выше приемлемым.

Тем временем я вернусь к настройке моей конфигурации vim дальше и заставляю себя использовать как можно меньше экземпляров vim.

4b9b3361

Ответ 1

Нет, Vim не может использовать сеанс между несколькими экземплярами. Так оно и было разработано, и оно не обеспечивает возможности совместного использования сеансов. Регистры, сопоставления/настройки "на лету", история команд и т.д. Являются локальными для сеанса Vim, и вы не можете реально сделать с этим что-либо.


Но ваш заголовок немного вводит в заблуждение: вы написали "буфер", но похоже, что вы только после копирования/вставки (который включает в себя "регистр", а не "буферы" ) из одного экземпляра Vim в другой. Это правильно? Если да, почему бы вам просто не создать себе правильную сборку с поддержкой буфера обмена?

Копирование/захват по экземплярам так же просто, как "+y в одном и "+p в другом.

Очевидно, что это не сработает, если ваши экземпляры Vim находятся в разных системах. В такой ситуации в исходном Vim и системной пасте в месте назначения Vim (возможно, с :set paste) является наиболее распространенным решением.


Если вы находитесь на Mac, установите MacVim и переместите сопутствующую mvim оболочку script где-то на своем пути. Вы можете использовать исполняемый файл MacVim на вашем терминале с помощью mvim -v.

Если вы работаете в Linux, установите пакет vim-gnome из диспетчера пакетов.

Если вы находитесь в Windows, установите последнюю версию "Vim without Cream".


Но все это выглядит как проблема XY. Использование эффективной команды Vim :e[dit] - это, пожалуй, лучшее решение для вашей основной проблемы: редактирование многих файлов из разных оболочек.