Как сделать ВИМ вставить (и копировать) в буфер обмена системы?
В отличие от других редакторов, 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.
специфика, похоже, несколько зависит от конфигурации и системы, поэтому ваш пробег определенно будет отличаться. Это определенно должно заставить вас указать в правильном направлении.
посмотреть Также
для меня эта конфигурация работает для копирования и вставки
" 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 поддерживает три выбора, называемые:
первичный, вторичный и буфер обмена
первичный выбор обычно используется для реализации копирования и вставка через среднюю кнопку мыши. Вторичный и буфер обмена выборки реже используются прикладными программами.
Я пробовал предложения выше, и ни один из них не работал в моей среде. (Клон шпатлевки 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, содержимое буфера обмена будет вставлен в курсор. Вы также можете сопоставить новую команду с функциональной клавишей, чтобы сделать это одним нажатием клавиши.
после ответа Коннера, который был отличным, но 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
- это:
проверьте, поддерживает ли 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
для вставки. NB modify .vimrc
на всех машинах, где вы хотите использовать эту функцию.
Если вы используете мышь, сначала сделайте
:set paste
затем right click mouse
и содержимое буфера будет вставлено