Как скопировать выделенные строки в буфер обмена в vim


87

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



Ответы:


107

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, отличными от gui.


8
Это работает, только если я устанавливаю vim-gnomeпакет вместо vim.
dan-klasson

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

Кажется, это работает для копирования в другие программы, отличные от vim, но когда я перехожу в режим вставки в vim и использую "shift + insert" для вставки из буфера обмена, вставляются только первые две строки ... Я установил vim-gnome ; я что-то упустил?
t2k32316

2
Если вы используете macOS, вам, вероятно, придется использовать clipboard=unnamedвместо него ( vim.wikia.com/wiki/Accessing_the_system_clipboard )
streof

13
set guioptions+=a

будет ... ммм, короче говоря, всякий раз, когда вы выбираете / дергаете что-то, также помещает это в буфер обмена (не в Vim, а в глобальную клавиатуру оконной системы). Таким образом, вам не нужно думать о занесении вещей в специальный регистр.


2
//, к каким операционным системам и / или версиям Vim применим этот совет?
Натан Басанезе,

10

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

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


Почему этот ответ не популярен? :(
Анкит Шубхам

6

Если вы используете vim в MAC OSX, к сожалению, он поставляется со старой версией и не соответствует параметрам буфера обмена. К счастью, домашнее пиво легко решает эту проблему.

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

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

установить графический интерфейс vim:

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

перезапустите терминал, чтобы вступили в силу.

добавьте следующую строку в ~ / .vimrc

set clipboard=unnamed

теперь вы можете скопировать строку в vim с помощью 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.