Перемещение буфера в 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.
Ответы
Ответ 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]
- это, пожалуй, лучшее решение для вашей основной проблемы: редактирование многих файлов из разных оболочек.