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


84

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

Здається, скопіюйте текст у буфер обміну vim, тому що p буде вставити його. Але в іншій програмі (наприклад, Chrome) клацання правою кнопкою миші>> вставити не вставить правильний текст. Як скопіювати текст у відповідний буфер обміну?

Відповіді:


62

Наступне буде працювати лише в тому випадку, якщо vim --versionвказується, що у вас є +xterm_clipboardфункція. Якщо ні, вам доведеться встановити додаткові пакети або перекомпілювати vim із доданою функцією.


Для цього є два варіанти:

"+y

копіює у буфер буфера обміну (звичайний) (щоб ви могли вставити за допомогою Ctrl + V, клацніть правою кнопкою миші та виберіть "Вставити" тощо),

"*y

копії до вибору X11 - ви можете вставити з цього буфера за допомогою середнього клацання.

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


@Thepang це не працює від шпаклівки. що я повинен зробити ?
Рахул Патіл

@RahulPatil Я не знаю; можливо, задайте окреме запитання, можливо, щодо Super User (оскільки це інструмент для Windows, це було б приємніше там).
thepang

@RahulPatil - якщо ви використовуєте шпаклівку, то ви редагуєте файл на віддаленому сервері, а не на локальній машині. Зазвичай віддалений сервер не буде знати про буфер обміну на вашій локальній машині. Якщо ви використовували робочий стіл Linux, то ви можете сш за допомогою переадресації X (за умови, що на сервер встановлено бібліотеки X), але як шпаклівка працює у Windows, у вас не працює X, тому ви не можете переслати її.
Хаміш Даунер

1
Привіт всім, Як набрати "+ у? Чи слід вводити його у візуальному режимі чи в командному режимі? Дурне, але я не в змозі це зрозуміти.
Alind Billore

@AlindBillore: у командному режимі. Буквально, натисніть клавіші shift'потім shift=потім y(в повному обсязі відразу, один за іншим, за винятком зрушень звичайно).
Рейд

31

Якщо ви використовуєте vim> = 7.3.74, ви можете фактично помістити це у свій vimrc:

set clipboard=unnamedplus

Який автоматично використовує +буфер (буфер обміну системи) за замовчуванням. Тоді, щоб дбати (копіювати), ви просто використовуєте звичайну yкоманду тощо.

Я вважав, що така поведінка є досить дратівливою, однак, як команди на зразок dпоміщають текст, над яким вони працюють, у буфер за замовчуванням, що означало, що я не можу зробити швидку ddта вставити рядок з Інтернету, наприклад.


2
+ є реєстратором буфера обміну
Kit Ho

1
Щодо вашої останньої точки, це ddозначає "перерізати одну лінію", так що це буде очікуваною поведінкою. У рідкісному випадку, коли ви хочете фактично видалити рядок у небуття, "_ddзробите свою справу.
користувач7089

також як зазначає @HamishDowner у своїй відповіді: Наступне буде працювати лише в тому випадку, якщо vim --versionвказується, що у вас є +xterm_clipboardфункція. Якщо ні, вам доведеться встановити додаткові пакети або перекомпілювати vim із доданою функцією.
rudolph9

24

Утримуйте клавішу Shift і виберіть текст курсором миші.
Текст буде скопійовано у буфер обміну.

Це також працює для вставки з буфера обміну в vim.

Щоб було зрозуміло, це працює для vimзапуску в такому терміналі, як xterm.


Ви маєте на увазі утримуючи клавішу Shift під час вибору тексту? Саме так я це роблю xterm.
nozimica

@nozimica: Так.
Цикл пробілу

Ця відповідь повинна мати більше відгуків ...
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

5

Неважливо, я знайшов відповідь - це написано у меню vim.

"+y

Дуже інтуїтивно зрозумілий.


Ви використовуєте gvim?
nozimica

@ nozimica- так
ripper234

1
Це також доступно в vim, що працює в xterm або подібному емуляторі терміналу під X (якщо vim компілюється з +xterm_clipboardфункцією).
Жиль

3

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

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


Чомусь це не працює. Просто виберіть у візуальному режимі, скопіюйте за допомогою ctrl-shift-C, а потім вставте в інший додаток за допомогою Ctrl-shift-V? Текст для мене не копіюється.
ripper234

2
@ ripper234: це не працює, якщо ви використовуєте gvim. Як сказав crazy2be, ця функціональність походить від вашого емулятора терміналу.
Рейд

@ ripper234: 1) Це функціонал, що надається емулятором терміналу (gnome-термінал для одного надає це), 2) Ctrl + Shift + V - це вставлення до терміналу , додатки GUI як і раніше використовують Ctrl + V, як зазвичай. Я відредагую відповідь, щоб зробити її більш зрозумілою.
crazy2be

якщо ви використовуєте mousedrag з керуванням зміною - виберіть текст, скопіювати вставлення з одного вікна буферів стає просто.
Стефан

2

За замовчуванням, якщо ви встановите легку версію vim, у вас не буде +xterm_clipboardфункції on ( vim --version | grep xterm), яка потрібна для використання *та +реєструється поза vim.

Щоб увімкнути його, потрібно або скомпілювати vim самостійно, або встановити версію vim, яка постачається з ним заздалегідь. Я використав vim-gnome : sudo apt-get install vim-gnome. Якщо ви виступаєте vim --version | grep xterm, ви побачите, що це зараз +xterm_clipboard.

Тепер спробуйте скопіювати в +і, *і воно повинно працювати.


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та інші системи.

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


Це не працює.
Астрід

творча відповідь
vidur punj

0

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.