2013-03-16 5 views
13

Можно ли это сделать?Перемещение буфера в vim через экземпляры vim

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

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

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

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

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

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

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

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

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

+3

написать буфер в файл, вставить из файла? –

+0

можно сделать vim использовать буфер обмена ОС, но мне это никогда не удавалось. – perreal

+0

drop vim search history, vim undo history, история команд vim и т. Д. (Хотя это начинает выглядеть так, что это неизбежно) –

ответ

10

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


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

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

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


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

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

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


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

Смежные вопросы