Как сделать ВИМ вставить (и копировать) в буфер обмена системы?
В отличие от других редакторов, vim хранит скопированный текст в своем собственном буфере обмена. Поэтому мне очень сложно скопировать текст с веб-страницы и вставить его в текущий рабочий файл. Так получилось, что мне нужно либо открыть gedit, либо ввести его вручную.
могу ли я сделать Vim вставить из и в буфер обмена системы?
24 ответов:
The
"*и"+регистры предназначены для буфера обмена системы (:help registers). В зависимости от вашей системы, они могут делать разные вещи. Например, в системах, которые не используют X11, таких как OSX или Windows,"*регистр используется для чтения и записи в системный буфер обмена. В системах X11 могут использоваться оба регистра. Смотрите:help x11-selectionдля более подробной информации, но в основном"*аналогично Х11-х основной выбор (который обычно копирует вещи, которые вы выбираете с помощью мыши и пасты со средней кнопкой мыши) и"+аналогично Х11-х буфер обмена выбор (который является собственно буфером обмена).если все это прошло через вашу голову, попробуйте использовать
"*yyили"+yyскопировать строку в буфер обмена системы. Предполагая, что у вас есть соответствующие параметры компиляции, один или другой должен работать. Возможно, вы захотите переназначить это на что-то более удобное для вас. Например, вы можете поставитьvnoremap <C-c> "*yв свой ~/.vimrc, чтобы вы могли визуально выберите и нажмите Ctrl+c чтобы дернуть в буфер обмена вашей системы.имейте в виду, что копирование/вставка из системного буфера обмена не работает если
:echo has('clipboard')возвращает 0. В этом случае vim не компилируется с помощью+clipboardхарактеристика и вам придется установить другую версию или перекомпилировать его. Некоторые дистрибутивы linux предоставляют минимальную установку vim по умолчанию, но обычно, если вы установитьvim-gtkпакета вы можете получить дополнительная функция.вы также можете взглянуть на
'clipboard'вариант, описанный в:help cb. В этом случае вы можете:set clipboard=unnamedили:set clipboard=unnamedplusчтобы все операции рывка/удаления автоматически копировались в системный буфер обмена. Это может быть неудобство в некоторых случаях, когда вы храните что-то еще в буфере обмена, поскольку он будет переопределять его.для вставки вы можете использовать
"+pили"*p(опять же, в зависимости от вашей системы и/или нужные выбора) или вы можете сопоставить их с чем-то другим. Я печатаю их явно, но я часто нахожусь в режиме вставки. Если вы находитесь в режиме вставки, вы все равно можете вставить их с правильным отступом с помощью<C-r><C-p>*или<C-r><C-p>+. Смотрите:help i_CTRL-R_CTRL-P.также стоит упомянуть vim (
:help paste). Это помещает vim в специальный "режим вставки", который отключает несколько других параметров, позволяя вам легко вставлять в vim с помощью эмулятора терминала или знакомого ярлыка вставки мультиплексора. Просто введите:set pasteчтобы включить его, вставьте содержимое и введите:set nopaste, чтобы отключить его. Кроме того, вы можете использоватьpastetoggleвозможность установить код ключа, который переключает режим (:help pastetoggle). Я рекомендую использовать регистры вместо этих параметров, но если они все еще слишком страшны, это может быть удобным обходным путем, пока вы совершенствуете свои отбивные vim.посмотреть
:help clipboardдля получения более подробной информации.
вы можете скопировать в vim. Сделайте файл в режиме вставки и используйте Ctrl+ Shift+v. Помните заранее, чтобы
:set pasteчтобы не возиться с identation ...
Linux
в моей системе Linux,
+и*регистры сопоставляются с выбором X11, который можно вставить средней кнопкой мыши. Когда:set clipboard=unnamedи:set clipboard=unnamedplusиспользуются, затем регистры сопоставляются с буфером обмена и могут быть вставлены с помощью CTRL-V.специфика, похоже, несколько зависит от конфигурации и системы, поэтому ваш пробег определенно будет отличаться. Это определенно должно заставить вас указать в правильном направлении.
посмотреть Также
для меня эта конфигурация работает для копирования и вставки
" copy and paste vmap <C-c> "+yi vmap <C-x> "+c vmap <C-v> c<ESC>"+p imap <C-v> <ESC>"+pa
это будут строки, которые вам нужны в вашем vimrc для этой цели:
set clipboard+=unnamed " use the clipboards of vim and win set paste " Paste from a windows or from vim set go+=a " Visual selection automatically copied to the clipboard
буфер обмена
существует специальный регистр для хранения этого выбора, это "* реестр. Здесь ничего не помещается, если только информация о том, что такое текст выбранный будет изменен (например, с помощью щелчка левой кнопкой мыши где-то), или когда другое приложение хочет вставить выделенный текст. Затем текст в разделе " * Регистрация. Например, чтобы вырезать линию и сделать ее текущей выбор/положить его на Буфер обмена:
"*ddаналогично, когда вы хотите вставить выделение из другого приложения, например, при нажатии на среднюю кнопку мыши, выбор ставится в поле " * Регистрация во-первых, а затем "поставить", как и любой другой регистр. Например, чтобы поставить выделение (содержимое буфера обмена):
"*pрегистрыE354
> There are nine types of registers: > 1. The unnamed register "" > 2. 10 numbered registers "0 to "9 > 3. The small delete register "- > 4. 26 named registers "a to "z or "A to "Z > 5. four read-only registers ":, "., "% and "# > 6. the expression register "= > 7. The selection and drop registers "*, "+ and "~ > 8. The black hole register "_ > 9. Last search pattern register "/вставить из буфер обмена
1. Clipboard: Copy 2. Vim insertmode, middle mouse keyПроверьте поддержку буфера обмена X11 в терминале
если вы хотите запустить Vim в терминале, вам нужно найти версию Vim, которая была скомпилирована с поддержкой буфера обмена. Проверьте наличие поддержки X11-буфер обмена, из консоли, введите:
% vim --versionесли вы видите "+xterm_clipboard", вы хорошо идти.
http://vim.wikia.com/wiki/Accessing_the_system_clipboard
сервер X поддерживает три выбора, называемые:
первичный, вторичный и буфер обмена
основной выбор обычно используется для реализации копирования и вставка через среднюю кнопку мыши. Вторичный и буфер обмена выборки реже используются прикладными программами.
я попробовал предложения выше, и ни один из них не работал в моей среде. (Windows PuTTY clone over ssh)
некоторые дополнительные googling появился: https://unix.stackexchange.com/questions/110684/copy-paste-into-sshd-vim-from-local-windows-clipboard
один из комментариев предложил использовать
SHIFT+INSERTкоторый сделал трюк для вставки из буфера обмена моего рабочего стола в буфер Vim.Ctrl-Cуже работал, чтобы скопировать в буфер обмена рабочего стола из Напор.
Я считаю, что этот вопрос заслуживает более объективного ответа.
Вход В Режим Вставки
- ESC
- :установить вставить
- пресс Я
- SHIFT + вставить (С текстом, скопированным в буфер обмена)
Выход Из Режима Вставки
- ESC
- : set nopaste
- пресс Я
вы вставили текст, и вы можете ввести снова.
не было +буфер обмена, поэтому я придумал это альтернативное решение с помощью xsel:
добавить в ваш ~/.vimrc:
vnoremap <C-C> :w !xsel -b<CR><CR>
краткое примечание для людей, чья установка vim не поддерживает регистры * и+. Нет необходимости загружать новую установку vim для вставки из буфера обмена. Вот альтернативный метод:
1) Установите parcellite (менеджер буфера обмена с низким объемом памяти);
2) в вашем .файл vimrc добавить следующее:
command Clip r !parcellite -c3) перезапустить vim.
теперь, когда вы вводите: Clip в качестве команды ex, содержимое буфера обмена будет вставлен в курсоре. Вы также можете сопоставить новую команду с функциональной клавишей, чтобы иметь возможность сделать это одним нажатием клавиши.
следуя ответу Коннера, который был отличным, но
C-R C-p +иC-R C-p *в режиме вставки немного неудобно. То же самое"*pи"+pиз командного режима.гуру VIM предложил следующее для отображения
C-vк чемуC-r C-p +делает.вы могли бы
:inoremap <C-v> <C-o>"+pтолько для режима вставкиесли вы действительно хотели переопределить блочный визуальный режим (не рекомендуется им как визуальный режим Хороший) вы могли бы иметь
map <C-v> "+p
сверху настройки
:set clipboard=unnamed, вы должны использоватьmvim -vкоторый вы можете получить сbrew install macvimЕсли вы используете vim на терминале.приложение на Mac OS X 10.9. По умолчанию vim не поддерживает опцию буфера обмена.
возможно, также стоит упомянуть, что в OSX с помощью Vim вы можете выбрать текст с помощью мыши, Cmd-C для копирования в системный буфер обмена OSX, и скопированный текст будет доступен в буфере обмена за пределами Vim.
другими словами, OSX относится к нему как к обычному окну, и именно здесь пригодится сильно оклеветанная кнопка "команда" Apple.
B-30
основываясь на ответе @lis2, я использую более простую конфигурацию, которая не будет принудительно вставлять режим в конце:
" Copy and paste if has('clipboard') && !has('gui_running') vnoremap <C-c> "+y vnoremap <C-x> "+d vnoremap <C-v> "+p inoremap <C-v> <C-r><C-o>+ endifимейте в виду, что все эти переопределяют сопоставления Vim по умолчанию:
v_CTRL-C: остановить визуальный режимv_CTRL-X: вычесть [число] из числаv_CTRL-V: блочный визуальный режимi_CTRL-V: вставьте следующую нецифровую буквально, которая является также отображается наi_CTRL-Qв качестве альтернативы можно использовать клавиши, вдохновленные глаголами" yank"," delete "и" put " Vim:
<C-y>,<C-d>и<C-p>соответственно. Они будут переопределять только одно сопоставление по умолчанию:
i_CTRL-P: обратный поиск ключевое слово для завершения
Что вам действительно нужно EasyClip. Он будет делать именно это и многое другое...
когда я использую свой Debian vim, который не интегрирован с Gnome (vim --version | grep clip # не поддерживает буфер обмена), я могу скопировать в буфер обмена после удержания клавиши Shift и выбора текста с помощью мыши, как и в любой другой программе curses. Как я понял из комментария @Conner, это терминал (gnome-terminal в моем случае), который отключает сообщение о событиях мыши, когда он чувствует мое нажатие Shift. Я предполагаю, что программы на основе проклятий могут получать события мыши после отправки определенная Escape-последовательность для терминала.
Если вы находитесь на windows, и вы хотите вставить содержимое системного буфера обмена с помощью
pзатем введите эту команду.:set clipboard = unnamedэто решило мою проблему.
есть два простых способа сделать это. Сделать свой файл в режиме вставки и 1) Нажмите среднюю кнопку (колесо прокрутки) в мыши, или 2) Ctrl + Shift + V
для некоторых международных клавиатур, возможно, потребуется нажать "+пробел и
".Так что в этом случае вам придется нажать "пробел+y или "пробел*y скопировать.
и "пробел+p или " пробел*p вставить.
если вы используете vim в MAC OSX, к сожалению, он поставляется со старым verion и не соответствует параметрам буфера обмена. К счастью, доморощенный может легко решить эту проблему.
установить vim:
brew install vim --with-lua --with-override-system-vimустановите gui verion из vim:
brew install macvim --with-lua --with-override-system-vimперезагрузите терминал для вступления в силу.
добавьте следующую строку~/.vimrcset clipboard=unnamedтеперь вы можно скопировать строку в vim с помощью
yyи вставьте его в масштабах всей системы.
другие решения хороши, если вы хотите изменить свой vimrc и т. д... Однако я хотел простой способ скопировать С ВИМ до клавиатуру системы. Вот что я придумал.
- выберите текст, который вы хотите скопировать в визуальный режим
v- пресс
:(он будет автоматически расширяться, чтобы показать:'<,'>)- тип
y *илиy +(в зависимости от вашего system) чтобы выдернуть выделенный текст в системный буфер обмена
самое простое решение для этого, которое также работает между различными машинами Linux через
ssh- это:
проверьте, поддерживает ли vim буфер обмена X-11:
vim --version | grep clipboard. Если он отчитывается-clipboardи-xterm_clipboardвы должны установить либоvim-gtkилиvim-gnome(gvim на arch linux)добавьте следующие строки в свой
.vimrc:set clipboard=unnamedplus set paste
- если вы входите на другой машина через ssh, используйте опцию-Y:
ssh -Y machineтеперь копирование и вставка должны работать точно так, как ожидалось на одном, и на разных машинах, используя только
yдля янки иpдля вставки. НБ изменить.vimrcна всех машинах, где вы хотите использовать эту функцию.
Если вы используете мышь сначала сделать
:set pasteзатем
right click mouseи содержимое в буфер скопируется
Comments