Як скопіювати вибрані рядки в буфер обміну у vim


85

Як скопіювати вибрані рядки в буфер обміну у vim. Я знаю, як це зробити для всіх текстових файлів , але хочу зробити для вибраних рядків. Дякую!



Відповіді:


105

SHIFTVпереводить вас у режим вибраних рядків. Потім "*yперетягує вибрані на даний момент рядки до *реєстру, який є буфером обміну. Існує досить багато різних реєстрів, для різних цілей. Дивіться розділ selection and drop registersдля отримання додаткової інформації про відмінності між *і +регістрами на Windows , і Linux.


10
У Linux + є глобальним буфером обміну, * - буфером обміну вибору, тоді як у Windows обидва вони переходять у глобальний буфер обміну.
Mohnish

74

Якщо ви працюєте на Linux і використовуєте VIm версії 7.3.74 або новішої (версія, яка встановлюється в Ubuntu 11.10 і далі задовольняє це), ви можете зробити

set clipboard=unnamedplus

який розмістить потертий текст у глобальному буфері обміну та дозволить вставляти з глобального буфера обміну без використання спеціальних регістрів. На відміну від рішення ldigas, це також буде працювати на версіях VIm, не пов'язаних із графічним інтерфейсом.


8
Це працює, лише якщо я встановлюю vim-gnomeпакет замість vim.
dan-klasson

4
@ dan-klasson: для цієї опції потрібен vim, скомпільований із підтримкою буфера обміну. Ви можете перевірити, чи це так, набравши vim --version | grep "+xterm_clipboard".
BenC

Здається, це працює для копіювання в інші програми, не пов’язані з vim, але коли я переходжу в режим вставки у vim і використовую «shift + insert» для вставки з буфера обміну, вставляються лише перші два рядки ... Я встановив vim-gnome ; мені щось ще не вистачає?
t2k32316

1
Якщо ви користуєтеся macOS, вам, ймовірно, доведеться використовувати clipboard=unnamedзамість цього ( vim.wikia.com/wiki/Accessing_the_system_clipboard )
streof

13
set guioptions+=a

буде, ... ухмм, коротше кажучи, кожного разу, коли ви щось вибираєте / витягуєте, також поміщайте це в буфер обміну (не Vim, а глобальну клавіатуру віконної системи). Таким чином, вам не доведеться думати про втягування речей у спеціальний реєстр.


2
//, до яких операційних систем та / або версій Vim застосовується ця порада?
Nathan Basanese

10

Для GVIM натисніть, vщоб перейти у візуальний режим; виділіть текст і натисніть, Ctrl+Insertщоб скопіювати виділення в глобальний буфер обміну.

З меню ви бачите, що клавіша швидкого доступу, "+yтобто утримуйте клавішу Shift, потім натисніть ", потім, +а потім відпустіть Shift і натисніть y(громіздко порівняно з Shift + Insert).


Чому ця відповідь не популярна? :(
Ankit Shubham

6

Якщо ви використовуєте vim в MAC OSX, на жаль, він поставляється зі старішою версією та не відповідає параметрам буфера обміну. На щастя, домашнє пиво може легко вирішити цю проблему.

встановити vim:

brew install vim --with-lua --with-override-system-vim

встановити gui verion vim:

brew install macvim --with-lua --with-override-system-vim

перезапустіть термінал, щоб набути чинності.

додайте наступний рядок до ~ / .vimrc

set clipboard=unnamed

тепер ви можете скопіювати рядок у vim with yy та вставити його загальносистемно.


//, я щойно протестував це на OSX 10.12.3, і він працював належним чином після того, як я встановив і останню Vim, і латексну графічну версію графічного інтерфейсу Vim, як ви тут рекомендували. Дякую, @anonymous.
Натан Басанес

4

Встановіть "xclip", якщо цього не зробили ...

sudo apt-get install xclip

Xclip поміщає дані в буфер обміну "виділення / виділення", який ви натискаєте середнім клацанням, щоб вставити, на відміну від "ctrl + v"

Перебуваючи у vim, використовуйте команди ex:

7w !xclip

або

1,7w !xclip

або

%w !xclip

Потім просто клацніть середнім клацанням, щоб вставити в будь-яку іншу програму ...


4

Якщо vim скомпільовано з підтримкою буфера обміну, тоді ви можете використовувати "*yзначення: витягнути візуально виділений текст до реєстру *('*' - для буфера обміну)

Якщо підтримка буфера обміну відсутня, я думаю, що лише іншим способом є використання Ctrl+Insertпісля візуального виділення тексту у vim.


3

Я додав наступний рядок до свого .vimrc

vnoremap <F5> "+y<CR>

Це дозволяє скопіювати виділений текст у буфер обміну, натиснувши F5. Ви повинні працювати у візуальному режимі, щоб це працювало.


1
Додайте ~/.vimrcДякую, це набагато краще.
jaggedsoft

2

Додайте наступний код у свій .vimrc:

if has('clipboard')
    if has('unnamedplus')  " When possible use + register for copy-paste
        set clipboard=unnamed,unnamedplus
    else         " On mac and Windows, use * register for copy-paste
        set clipboard=unnamed
    endif
endif
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.