Как сделать vim-пасту из (и скопировать в) системный буфер?

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

Могу ли я сделать vim-пасту и из системного буфера обмена?

Ответ 1

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

Если все это у вас над головой, попробуйте использовать "*yy или "+yy чтобы скопировать строку в системный буфер обмена. Предполагая, что у вас есть соответствующие параметры компиляции, один или другой должен работать. Вы можете переназначить это на что-то более удобное для вас. Например, вы можете поместить vnoremap <Cc> "*y в ваш ~/.vimrc, чтобы вы могли визуально выбирать и нажимать Ctrl + c, чтобы вернуться в буфер обмена вашей системы.

Имейте в виду, что копирование/вставка из системного буфера обмена не будет работать, если :echo has('clipboard') возвращает 0. В этом случае vim не скомпилирован с +clipboard и вам придется установить другую версию или перекомпилируйте это. Некоторые дистрибутивы Linux предоставляют минимальную установку vim по умолчанию, но, как правило, если вы устанавливаете пакет vim-gtk или vim-gtk3 , вы можете получить дополнительные функции.

Вы также можете захотеть взглянуть на параметр 'clipboard' описанный по адресу :help cb. В этом случае вы можете :set clipboard=unnamed :set clipboard=unnamedplus или :set clipboard=unnamedplus чтобы все операции удаления/удаления автоматически копировались в системный буфер обмена. Это может быть неудобно в некоторых случаях, когда вы сохраняете что-то еще в буфере обмена, так как это переопределит его.

Для вставки вы можете использовать "+p или "*p (опять же, в зависимости от вашей системы и/или желаемого выбора) или вы можете сопоставить их с чем-то другим. Я печатаю их явно, но часто оказываюсь в режиме вставки. Если вы находитесь в режиме вставки, вы все равно можете вставить их с правильным отступом, используя <Cr><Cp>* или <Cr><Cp>+. Смотрите :help i_CTRL-R_CTRL-P.

Также стоит упомянуть параметр vim paste (:help paste). Это переводит vim в специальный "режим вставки", который отключает несколько других опций, позволяя легко вставлять в vim с помощью эмулятора терминала или знакомого ярлыка мультиплексора. Просто введите :set paste чтобы включить его, вставьте содержимое, а затем введите :set nopaste чтобы отключить его. Кроме того, вы можете использовать опцию pastetoggle чтобы установить код клавиши, который переключает режим (:help pastetoggle). Я рекомендую использовать регистры вместо этих опций, но если они все еще слишком страшны, это может быть удобным обходным путем, пока вы совершенствуете свои vim отбивные.

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

Ответ 2

Вы можете скопировать в vim ярлык gnome-терминала для вставки. Сделайте файл в режиме вставки и используйте

Ctrl + Shift + v.

Помните заранее, чтобы

 :set paste 

чтобы не возиться с отступом.

Ответ 3

Linux

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

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

См. также

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

Ответ 4

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

" copy and paste
vmap <C-c> "+yi
vmap <C-x> "+c
vmap <C-v> c<ESC>"+p
imap <C-v> <ESC>"+pa

Ответ 5

Для этой цели вам понадобятся строки, которые вам нужны в вашем 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

Ответ 6

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

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

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


Режим выхода из пасты

  • ESC
  • : установить nopaste
  • нажмите i

Вы вставили текст и можете снова печатать.

Ответ 7

буфер обмена

Существует специальный регистр для хранения этого выбора, это регистр "*. Здесь ничего не вводится, если только информация о том, какой текст выделен, не собирается измениться (например, где-то щелчком левой кнопки мыши) или когда другое приложение хочет вставить выделенный текст. Затем текст помещается в регистр "*. Например, чтобы вырезать линию и сделать ее текущим выделением/поместить ее на КЛАПАН:

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

ПЕРВИЧНАЯ, ВТОРИЧНАЯ И КЛИПАТОРСКАЯ

ПЕРВИЧНЫЙ выбор обычно используется для осуществления копирования и вставки с помощью средней кнопки мыши. Выбор SECONDARY и CLIPBOARD реже используется прикладными программами.

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

Ответ 8

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

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

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

Ответ 9

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

Добавьте к своему ~/.vimrc:

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

Ответ 10

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

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

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

command Clip r !parcellite -c

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

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

Ответ 11

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

Ответ 12

Следуя ответам Conner, это было здорово, но 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

Ответ 13

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

установить 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 и вставить ее в системную область.

Ответ 14

В верхней части настройки :set clipboard=unnamed вы должны использовать mvim -v, который вы можете получить с помощью brew install macvim, если вы используете vim на Terminal.app в Mac OS X 10.9. По умолчанию vim не поддерживает настройку буфера обмена.

Ответ 15

Также стоит упомянуть, что в OSX с помощью Vim вы можете выбрать текст с помощью мыши Cmd-C для копирования в системный буфер обмена OSX, а скопированный текст будет доступен в буфере обмена вне Vim.

Другими словами, OSX рассматривает его так, как будто это обычное окно, и именно здесь очень удобна кнопка "Command" Apple.

В-30

Ответ 16

Основываясь на ответе @lis2, я использую более простую конфигурацию, которая не будет принудительно вставлять режим Insert в конце:

" 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: в блочном режиме Визуальный режим
  • i_CTRL-V: вставить следующий незначный буквально, который также отображается на i_CTRL-Q

В качестве альтернативы можно использовать клавиши, вдохновленные "янки", "удалить" и "поместить" глаголы Vim: <C-y>, <C-d> и <C-p> соответственно. Они будут отменять только одно сопоставление по умолчанию:

  • i_CTRL-P: обратное поисковое ключевое слово для завершения

Ответ 17

Что вам действительно нужно, EasyClip. Он будет делать это и многое другое...

Ответ 18

Простейшим решением этого, которое также работает между различными машинами 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
  1. Если вы заходите на другую машину через ssh, используйте опцию -Y: ssh -Y machine

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

Ответ 19

С Vim 8+ в Linux или Mac вы можете просто использовать встроенную вставку операционной системы (ctrl+shift+V в Linux, cmd+V в Mac). Не нажимайте i для режима вставки.

Он вставит содержимое буфера обмена вашей ОС, сохраняя пробелы и вкладки без добавления автоматического отступа. Это эквивалентно старому :set paste, i, ctrl+shift+V, esc :set nopaste.

Вам даже больше не нужны функции +clipboard или +xterm_clipboard. Эта функция называется "вставка в скобках". Для получения дополнительной информации см. Отключение автоматического отступа при вставке текста в vim.

Ответ 20

Когда я использую свой Debian vim, который не интегрирован с Gnome (vim -version | grep clip # не показывает поддержку буфера обмена), я могу скопировать в буфер обмена, удерживая клавишу Shift и выбрав текст с помощью мыши, просто как с любой другой программой проклятий. Как я понял из комментария @Conner, это терминал (гном-терминал в моем случае), который отключает отчет о событиях мыши, когда он воспринимает мое нажатие Shift. Я предполагаю, что программы на основе проклятий могут принимать события мыши после отправки определенной последовательности Escape на терминал.

Ответ 21

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

:set clipboard = unnamed

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

Ответ 22

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

Ответ 23

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

Поэтому в этом случае вам нужно будет нажать " Space + y или " Space * y.

И " Space + p или " Space * p для вставки.

Ответ 24

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

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

Ответ 25

Вам нужно сделать три вещи:

Запустите MacVim в терминале

Установите macvim, как хотите. Я использовал homebrew:

brew install macvim

Добавьте символическую ссылку, чтобы можно было блаженно печатать vim:

ln -s /usr/local/bin/mvim /usr/local/bin/vim
ll /usr/local/bin | grep vim
lrwxr-xr-x  1 max  admin    19B Mar  1 15:49 vim -> /usr/local/bin/mvim

Подробнее об этом можно узнать в этом сообщении .

Скажите macOS, чтобы выполнить поиск /usr/local/bin до /usr/bin

PATH переменная - это список каталогов, которые macOS ищет для поиска двоичных файлов. Мы хотим, чтобы macOS нашла нашу символическую ссылку до того, как она найдет систему vim. Эта конфигурация находится внутри файла /etc/paths:

$ sudo vim /etc/paths
Password:
$ cat /etc/paths
/usr/local/bin
/usr/bin
/bin
/usr/sbin
/sbin
$ which vim
/usr/local/bin/vim

Подробнее об этом можно узнать в

Добавить конфигурацию в файл ~/.vimrc

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

set clipboard=unnamed

Подробнее об этом можно узнать на vim wiki

Теперь операции, такие как yy, D и P, работают с системным буфером обмена. Не нужно префикс их с помощью "+ или "*.

Ответ 26

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

 :set paste 

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

Ответ 27

Так как vim 8 правой кнопкой мыши включает визуальный режим по умолчанию. Это предотвращает "нормальное" копирование и вставку (назовите его "дефектом по замыслу" https://github.com/vim/vim/issues/1326). Исправьте это, выполнив:

echo "set mouse-=a" >> ~/.vimrc.

Выйдите и перезапустите vim.

Ответ 28

Я столкнулся с этой проблемой на Macbook Pro середины 2017 года, в котором iTerm2 работал с vim в качестве основной среды разработки.

Как предлагали другие ответы, я запустил vim --version и заметил, что он возвращает -clipboard, что означает, что версия vim, поставляемая с моей машиной, не была скомпилирована с опцией буфера обмена.

Пакет homebrew для vim видимому, компилируется с опцией clipboard, поэтому для меня было исправлено следующее:

  1. Запустить brew install vim
  2. Добавить set clipboard+=unnamed в мой файл ~/.vimrc
  3. Закройте и снова iTerm2