Как сделать ВИМ вставить (и копировать) в буфер обмена системы?

В отличие от других редакторов, vim хранит скопированный текст в собственном буфере обмена. Поэтому мне очень сложно скопировать текст с веб-страницы и вставить его в текущий рабочий файл. Так случилось, что мне нужно либо открыть gedit, либо ввести его вручную.

могу ли я сделать Vim вставить из и в буфер обмена системы?

24 ответов


на "* и "+ регистры предназначены для буфера обмена системы (:help registers). В зависимости от вашей системы, они могут делать разные вещи. Например, в системах, которые не используют X11, таких как OSX или Windows,"* регистр используется для чтения и записи в системный буфер обмена. В системах X11 могут использоваться оба регистра. См.:help x11-selection для более подробной информации, но в основном "* аналогично X11 в основной выбор (который обычно копирует вещи, которые вы выбираете с помощью мыши и пасты со средней кнопкой мыши) и "+ аналогично X11 буфер обмена выбор (который является собственно буфером обмена).

если все это прошло через вашу голову, попробуйте использовать "*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's (:help paste). Это помещает vim в специальный "режим вставки", который отключает несколько других опций, позволяя вам легко вставлять в vim с помощью эмулятора терминала или знакомого ярлыка вставки мультиплексора. Просто введите :set paste чтобы включить его, вставьте содержимое и введите :set nopaste, чтобы отключить его. Кроме того, вы можете использовать pastetoggle возможность установить код ключа, который переключает режим (:help pastetoggle). Я рекомендую использовать регистры вместо этих параметров, но если они все еще слишком страшны, это может быть удобным обходным путем, пока вы совершенствуете свои отбивные vim.

посмотреть :help clipboard для получения более подробной информации.


вы можете скопировать в vim. Сделайте файл в режиме вставки и используйте Ctrl+ Shift+v. Помните заранее

 :set paste 

чтобы избежать возни с идентификатором ...


Linux

в моей системе Linux,+ и * регистры сопоставляются с выделением X11, которое можно вставить средней кнопкой мыши. Когда :set clipboard=unnamed и :set clipboard=unnamedplus используются, затем регистры отображаются в буфер обмена и могут быть вставлены с помощью CTRL-V.

специфика, похоже, несколько зависит от конфигурации и системы, поэтому ваш пробег определенно будет отличаться. Это определенно должно заставить вас указать в правильном направлении.

посмотреть Также

http://vim.wikia.com/wiki/Accessing_the_system_clipboard


для меня эта конфигурация работает для копирования и вставки

" 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

аналогично, когда вы хотите вставить выделение из другого приложения, например, нажав среднюю кнопку мыши, выделение помещается в " * register сначала, а потом "поставить" как любой другой регистр. Например, поставить выделение (содержимое буфера обмена):

    "*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-clipboard, в консоли введите:

% vim --version

если вы видите "+xterm_clipboard", вы хорошо идти.

http://vim.wikia.com/wiki/Accessing_the_system_clipboard

сервер X поддерживает три выбора, называемые:

первичный, вторичный и буфер обмена

первичный выбор обычно используется для реализации копирования и вставка через среднюю кнопку мыши. Вторичный и буфер обмена выборки реже используются прикладными программами.

http://linux.die.net/man/1/xsel


Я пробовал предложения выше, и ни один из них не работал в моей среде. (Клон шпатлевки Windows через ssh)

появился дополнительный поиск в гугле: https://unix.stackexchange.com/questions/110684/copy-paste-into-sshd-vim-from-local-windows-clipboard

один из комментариев предложил использовать SHIFT+INSERT что сделало трюк для вставки из буфера обмена моего рабочего стола в буфер Vim. Ctrl-C уже работал, чтобы скопировать в буфер обмена рабочего стола из Напор.


Я считаю, что этот вопрос заслуживает более объективного ответа.

Ввод Режима Вставки

  • ESC
  • : установить paste
  • пресс Я
  • SHIFT + вставить (С текстом, скопированным в буфер обмена)


Выход Из Режима Вставки

  • ESC
  • :установить nopaste
  • пресс Я

вы вставили текст, и вы можете ввести его снова.


не было буфера обмена+, поэтому я придумал это альтернативное решение с помощью xsel:

добавить в ваш ~/.vimrc:

vnoremap <C-C> :w !xsel -b<CR><CR>


краткое примечание для людей, чья установка vim не поддерживает регистры * и+. Нет необходимости загружать новую установку vim для вставки из буфера обмена. Вот альтернативный метод:

1) установить parcellite (менеджер буфера обмена с низким объемом памяти);

2) в вашем .файл vimrc добавить следующее:

command Clip r !parcellite -c

3) перезапустите vim.

теперь, когда вы вводите: клип в качестве команды ex, содержимое буфера обмена будет вставлен в курсор. Вы также можете сопоставить новую команду с функциональной клавишей, чтобы сделать это одним нажатием клавиши.


Это работает для меня: Ctrl+ Shift+V


после ответа Коннера, который был отличным, но C-R C-p + и C-R C-p * в режиме вставки немного неудобно. Дитто "*p и "+p из командного режима.

ВИМ гуру предложил следующее на карту C-v к чему C-r C-p + делает.

вы могли бы :inoremap <C-v> <C-o>"+p только для режима вставки

если вы действительно хотели, чтобы переопределить blockwise визуальном режиме (не рекомендуется им в качестве визуального режим хорош) вы могли бы иметь 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: вычесть [count] из числа
  • v_CTRL-V: blockwise визуальный режим
  • 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. Я предполагаю, что программы на основе проклятий могут получать события мыши после отправки определенная последовательность эвакуации к терминалу.


Если вы находитесь в windows, и вы хотите вставить содержимое системного буфера обмена с помощью p затем введите эту команду.

:set clipboard = unnamed

это решило мою проблему.


есть два простых способа сделать это. Сделать свой файл в режиме вставки и 1) Нажмите среднюю кнопку (колесо прокрутки) мыши или 2) Ctrl + Shift + V


для некоторых международных клавиатур вам может потребоваться нажать "+пробел и ".

поэтому в этом случае вам придется нажать "пробел+y или "пробел*y скопировать.

и "пробел+p или " пробел*p вставить.


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

установить 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 с помощью yy и вставьте его в масштабах всей системы.


другие решения хороши, если вы хотите изменить свой vimrc и т. д... Однако я хотел простой способ скопировать С vim to клавиатуру системы. Вот что я придумал.

  • выберите текст, который вы хотите скопировать в визуальный режим v
  • пресс : (он будет автоматически расширяться, чтобы показать :'<,'>)
  • тип y * или y + (в зависимости от вашего system) для переноса выделенного текста в системный буфер обмена

самое простое решение для этого, которое также работает между различными машинами Linux через ssh - это:

  1. проверьте, поддерживает ли vim буфер обмена X-11:vim --version | grep clipboard. Если он отчитывается -clipboard и -xterm_clipboard вы должны установить либо vim-gtk или vim-gnome (gvim на arch linux)

  2. добавьте следующие строки в свой .vimrc:

set clipboard=unnamedplus
set paste
  1. если вы входите в другой машина через ssh, используйте опцию-Y:ssh -Y machine

теперь копирование и вставка должны работать точно так, как ожидалось на одном, и на разных машинах только с помощью y для янки и p для вставки. NB modify .vimrc на всех машинах, где вы хотите использовать эту функцию.


Если вы используете мышь, сначала сделайте

 :set paste 

затем right click mouse и содержимое буфера будет вставлено