Как скопировать текст из vim во внешнюю программу?

84

Я пытаюсь скопировать текст из Vim. Я делаю v, чтобы войти в визуальный режим, затем y, когда я выбрал свой блок.

Похоже, что текст скопирован в буфер обмена vim, потому что p вставит его. Но в другой программе (например, Chrome) щелчок правой кнопкой мыши -> вставка не вставляет правильный текст. Как скопировать текст в правильный буфер обмена?

ripper234
источник

Ответы:

63

Следующее будет работать, только если vim --versionуказывает, что у вас есть +xterm_clipboardфункция. Если нет, вам придется установить дополнительные пакеты или перекомпилировать vim с добавленной функцией.


На самом деле есть два варианта:

"+y

копирует в «обычный» буфер буфера обмена (так что вы можете вставить, используя Ctrl + V, щелкнуть правой кнопкой мыши и выбрать «Вставить» и т. д.), пока

"*y

Копирует в выбор X11 - вы можете вставить из этого буфера, используя средний щелчок.

Обратите внимание, что "*и "+работают в обе стороны. Таким образом, если вы выбрали какой-то текст в другом приложении, вы можете вставить его в vim, используя, "*pа если вы скопировали какой-то текст (используя, скажем, Ctrl-C), то вы можете вставить его в vim, используя "+p.

Хэмиш Даунер
источник
@Tshepang это не работает от замазки. что я должен делать ?
Рахул Патил
@RahulPatil Я не знаю; может быть, задать отдельный вопрос, возможно, о суперпользователе (так как это инструмент Windows, было бы более желательно там).
Чепанг
@RahulPatil - если вы используете putty, вы редактируете файл на удаленном сервере, а не на локальном компьютере. Обычно удаленный сервер не будет знать о буфере обмена на вашем локальном компьютере. Если вы использовали рабочий стол Linux, то вы можете использовать ssh с пересылкой X (при условии, что вы установили библиотеки X на сервере), но, так как замазка запускается на окнах, у вас не работает X, поэтому вы не можете переслать его.
Хэмиш Даунер
1
Привет всем, Как набрать "+ y? Если я наберу его в визуальном режиме или в командном режиме? Глупо, но я не могу понять это.
Alind Billore
@AlindBillore: в командном режиме. Буквально, нажмите клавиши shift'затем shift=затем y(не все сразу, один за другим, за исключением сдвигов конечно).
Рейд
31

Если вы используете vim> = 7.3.74, вы можете поместить это в ваш vimrc:

set clipboard=unnamedplus

Который будет автоматически использовать +буфер (системный буфер обмена) по умолчанию. Затем, чтобы восстановить (скопировать), вы просто используете обычную yкоманду и т. Д.

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

Reid
источник
2
+ регистратор буфера обмена
Кит Хо,
1
Что касается вашего последнего пункта, ddозначает «отрезать одну линию», так что это будет ожидаемое поведение. В том редком случае, когда вы действительно хотите удалить строку в забвение, "_ddсделайте свое дело.
user7089
также, как отмечает @HamishDowner в своем ответе: следующее будет работать, только если vim --versionуказывает, что у вас есть +xterm_clipboardфункция. Если нет, вам придется установить дополнительные пакеты или перекомпилировать vim с добавленной функцией.
rudolph9
24

Удерживая клавишу Shift, выделите текст курсором мыши.
Текст будет скопирован в буфер обмена.

Это также работает для вставки из буфера обмена в vim.

Чтобы было ясно, это работает для vimзапуска в терминале, таком как xterm.

Loop Space
источник
Вы имеете в виду, удерживая клавишу Shift при выборе текста? Вот так я и делаю xterm.
nozimica
@nozimica: Да.
Loop Space
Этот ответ должен иметь больше голосов ...
whoan
@LoopSpace для многострочного выбора, это также будет копировать номера строк, когда set nuвключено. Поэтому вы, вероятно, захотите переключать номера строк с помощью какой-либо комбинации клавиш или запускать :set nonuкоманду перед каждым выбором
Стивен Прибилинский
На MAC удерживайте нажатой клавишу выбора и выделите текст курсором мыши
abreschi
10

Я нахожу стандарт "+gPи "+yкоманды очень сложными в использовании. Так что я переназначил Ctrl-Yза рывки в буфер обмена и Ctrl-Pвставить из буфера обмена. Добавьте это к.vimrc

nnoremap <C-y> "+y
vnoremap <C-y> "+y
nnoremap <C-p> "+gP
vnoremap <C-p> "+gP
Бернхард Хейстек
источник
6

Не берите в голову, я нашел ответ - это написано в меню vim.

"+y

Очень интуитивно понятно

ripper234
источник
Вы используете gvim?
nozimica
@ nozimica- да
ripper234
1
Это также доступно в vim, работающем в xterm или аналогичном эмуляторе терминала под X (если vim скомпилирован с этой +xterm_clipboardфункцией).
Жиль
3

Просто для добавления ответа, не относящегося к vim: Вы можете использовать его Ctrl+Shift+Cдля копирования в системный буфер обмена в Ubuntu (если функциональность обеспечивается вашим эмулятором терминала, gnome-терминал для одного обеспечивает это). Ctrl+Shift+Vвставляет в другое окно терминала, обычные Ctrl+Vвставляет в приложение с графическим интерфейсом.

Кроме того, если вы выберете текст в терминале, а затем щелкните средней кнопкой мыши, он будет вставлен из буфера обмена X11.

crazy2be
источник
По какой-то причине это не работает. Просто выберите в визуальном режиме, скопируйте с помощью ctrl-shift-C, а затем вставьте в другое приложение, используя Ctrl-shift-V? Текст не копируется для меня.
ripper234
2
@ ripper234: это не работает, если вы используете gvim. Как сказал crazy2be, эта функциональность от вашего эмулятора терминала.
Рейд
@ ripper234: 1) Это функциональность, обеспечиваемая вашим эмулятором терминала (gnome-терминал для одного предоставляет его), 2) Ctrl + Shift + V - это вставка в терминал , приложения GUI по-прежнему используют Ctrl + V, как обычно. Я отредактирую ответ, чтобы сделать его более понятным.
crazy2be
если вы используете shift-control mousedrag - выделите текст, вставка копии из одного окна буфера станет легкой.
Стефан
2

По умолчанию, если вы установите облегченную версию Vim, то вы не будете иметь +xterm_clipboardфункцию на ( vim --version | grep xterm), которая необходима для использования *и +регистров за пределами Vim.

Чтобы включить его, вы должны либо скомпилировать vim самостоятельно, либо установить версию vim, которая поставляется вместе с предварительно активированной. Я использовал vim-gnome sudo apt-get install vim-gnome. Если вы выполните vim --version | grep xterm, вы увидите, что это сейчас +xterm_clipboard.

Теперь попробуйте скопировать в +и *и это должно работать.

laughing_man
источник
2

Когда я проверил, мой vim не поддерживает буфер обмена:

vim --version | grep clip
-clipboard       +insert_expand   +path_extra      +user_commands
+emacs_tags      -mouseshape      +startuptime     -xterm_clipboard

Я установил vim-gnome, а затем снова проверил

vim --version | grep clipboard
+clipboard       +insert_expand   +path_extra      +user_commands
+emacs_tags      +mouseshape      +startuptime     +xterm_clipboard

Теперь я могу копировать и вставлять, используя "+ y и" + p соответственно.

Ашутош Трипатия
источник
1

Удерживайте клавишу SHIFT и мышкой выберите текст, чтобы скопировать его.

Затем вставьте в другую программу с CTRL + v.

Работает в терминале на моей Ubuntu 16.04. Не уверен насчет gvimи других систем.

введите описание изображения здесь

Анджей Реманн
источник
Это не работает.
Астрид
креативный ответ
видур пунь
0

Просто чтобы добавить, если что-то работает, попробуйте переключить терминал, который оборачивает vim (если вы используете vim из терминала). Я обнаружил, что, например, буфер обмена недоступен с помощью guake, а доступен из gnome-терминала.

GC5
источник