3

Я пытаюсь скопировать большой блок кода (с сохранением отступов) из одного терминала vim в другой. Мне было интересно, есть ли прямой способ сделать это?

Будет ли это рассматриваться как функциональность vim или свойство терминала?

4 ответа4

3

В вашем вопросе много чего не хватает: какой эмулятор терминала вы используете? На какой платформе? Vim скомпилирован с поддержкой буфера обмена?

Я на Ubuntu, работаю с Vim 7.3 с поддержкой буфера обмена в Gnome Terminal, так что YMMV.

Я могу выбрать блок кода с V в одном экземпляре Vim в одном окне терминала и поместить его в другой экземпляр Vim в другом окне терминала простым щелчком мыши. Без мыши я могу восстановить выделение в системном буфере обмена с помощью "*y в первом окне и поставить с помощью "*p во втором окне.

Возможно, вам понадобится сделать :set paste перед вставкой блока кода и :set nopaste after.

Кроме того, почему вы используете два разных экземпляра Vim в двух разных оконных окнах, когда Vim имеет встроенные раздельные окна?

1

Вы должны иметь возможность копировать с одного терминала, удерживая Shift при пометке с помощью мыши и вставки на другой терминал с помощью среднего щелчка или Shift+insert .

1

Если вы используете стандартный терминал, такой как GNOME Terminal или xterm, и правильно настроенный Vim, это должно сработать. То есть вы должны быть в состоянии использовать мышь, чтобы выбрать текст, который вы хотите скопировать, затем нажмите среднюю кнопку мыши в целевом Vim, и текст будет вставлен.

Если блок слишком большой, чтобы его можно было легко выделить с помощью мыши, вместо этого вы можете выбрать текст с клавиатуры. Переместите курсор к первой строке блока, введите V , переместите курсор к нижней части блока и введите "*y . Затем вы можете вставить этот текст либо с помощью мыши, как раньше, либо набрав "*p , либо выполнив

:put *

Если это не работает, наиболее вероятной причиной является то, что Vim, который вы используете в терминале, не был скомпилирован с поддержкой X, поэтому он не может обмениваться данными с X-сервером. Вы можете узнать это, выполнив

:echo has("x11") has("xterm_clipboard")

Если ваш Vim был скомпилирован с обеими этими функциями, результат будет « 1 1 ».

Если ваш Vim не имеет этих функций, но у вас установлен gvim, одно из решений - запустить gvim в режиме терминала как

gvim -v
0

В этой головоломке есть несколько частей, которые должны работать вместе, чтобы копирование / вставка работала.

Во-первых, у "терминала" должен быть способ обмена данными из одного сеанса в другой ... В большинстве случаев это обрабатывается каким-то менеджером GUI ... (XORG/Windows/ и т.д.), Который реализует некоторую функцию "буфера обмена".

Во-вторых, само приложение "терминал" должно иметь возможность взаимодействовать с любым существующим интерфейсом буфера обмена ... чтобы синхронизировать все "терминалы" ...

В-третьих, оболочка (bash/ash/dash/csh/etc ...) должна иметь возможность доступа к API буфера обмена терминала ...

В-четвертых, VIM необходимо использовать API-интерфейсы буфера обмена, предоставляемые оболочкой, в которой он работает.

Любой из этих сбоев может означать, что ваше приложение не может использовать буфер обмена между терминалами.

Все это, как говорится ... есть некоторые "стандартизированные" вызовы API для буфера обмена ... поэтому, если каждый бит выполнил свою работу должным образом, он должен работать.

Теперь ... есть несколько удобных трюков, чтобы просто выполнить свою работу, не беспокоясь обо всем дерьме с буфером обмена ... что, вероятно, то, что вы хотите начать с ...

VIM позволит вам скопировать текст и экспортировать его в файл, а затем на другой консоли импортировать текст из этого файла, и вот как:

Во-первых: убедитесь, что вы не находитесь в режиме "редактирования" ... (нажмите клавишу выхода) и переместите курсор в место, в которое вы хотите начать копирование, и нажмите клавишу v . Перейдите к концу того, что вы хотите выбрать ... и нажмите клавишу y .

Если вы хотите вставить копию в тот же документ в этот момент ... просто переместите курсор в любое место и нажмите p ... но поскольку мы копируем в другой терминал, нам нужно открыть новый файл где-нибудь еще вставить в ... вот так:

:e ~/temp-file

затем нажмите p чтобы вставить текст ... :w чтобы написать его. затем выполните команду :bp чтобы закрыть этот временный файл и вернуться к файлу, над которым вы работали ...

Теперь, на другом терминале, просто перейдите к месту в файле, в который вы хотите вставить (не в режиме редактирования)... и выполните :r ~/temp-file чтобы прочитать содержимое этого файла в ваш текущий документ , Когда вы все закончите ... обязательно удалите временный файл.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .