Vim: копирование и вставка с терминала на терминал?

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

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

30
задан Dark Templar
27.01.2023 15:32 Количество просмотров материала 3409
Распечатать страницу

4 ответа

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

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

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

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

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

3
отвечен romainl 2023-01-28 23:20

если вы используете стандартный терминал, такой как 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
1
отвечен garyjohn 2023-01-29 01:37

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

1
отвечен 2023-01-29 03:54

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

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

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

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

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

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

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

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

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

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

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

:e ~/temp-file

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

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

0
отвечен TheCompWiz 2023-01-29 06:11

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх