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



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



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

1080   24  

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.

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

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

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

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

    "*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 поддерживает три выбора, называемые:

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

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

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

я попробовал предложения выше, и ни один из них не работал в моей среде. (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 -c

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

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

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

следуя ответу Коннера, который был отличным, но 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

перезагрузите терминал для вступления в силу.


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

теперь вы можно скопировать строку в vim с помощью yy и вставьте его в масштабах всей системы.

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

  • выберите текст, который вы хотите скопировать в визуальный режим 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 для вставки. НБ изменить .vimrc на всех машинах, где вы хотите использовать эту функцию.

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

 :set paste 

затем right click mouse и содержимое в буфер скопируется

Comments

    Ничего не найдено.