Как скопировать в буфер обмена в Vim?



можно ли скопировать в буфер обмена прямо из Vim? yy только копирует материал во внутренний буфер Vim. Я хочу скопировать в буфер обмена ОС. Есть ли такая команда в Vim или вы можете только дергать вещи в Vim?

948   26  

26 ответов:

The * Регистрация сделает это. В Windows, + и * эквивалентны. В unix есть тонкая разница между + и *:

под Windows, регистры * и + являются эквивалентными. Для систем X11, хотя, они отличаются. Для систем X11, * - это выбор, а + - буфер вырезания (например, буфер обмена). http://vim.wikia.com/wiki/Accessing_the_system_clipboard

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

в дистрибутивах Linux по какой-то причине вам сначала нужно установить vim-gtk, чтобы получить функциональность буфера обмена.

и для тех, кто запутался в том, как использовать регистры при рывке или положить, вы просто пишете " затем имя регистра. Так что для копирования чего-то в буфер обмена регистр вы набираете "*y а потом поставить вам типа "*p

На Mac OSX

  • копировать выделенную часть: визуально выделить текст (тип v или V в нормальных режим) и введите :w !pbcopy

  • скопировать весь файл :%w !pbcopy

  • вставить из буфера обмена :r !pbpaste

On большинствоLinux дистрибутивы, вы можете заменить:

  • pbcopy выше xclip -i -sel c или xsel -i -b
  • pbpaste используя xclip -o -sel -c или xsel -o -b
    -- Примечание:в случае, если ни один из этих инструментов (xsel и xclip) предустановлены на вашем дистрибутиве, вы, вероятно, можете найти их в репозиториях

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

на Windows set:

set clipboard=unnamed

на Linux set (vim 7.3.74+):

set clipboard=unnamedplus

Примечание: возможно, вам потребуется использовать обновленную версию Vim для их работы.

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

использовать регистр "+ копировать в системный буфер обмена (т. е. "+y вместо y).

аналогично вы можете вставить "+ чтобы получить текст из системного буфера обмена (т. е. "+p вместо p).

@Jacob Dalton упомянул об этом в комментарии, но никто, похоже, не упомянул в ответе, что vim должен быть скомпилирован с поддержкой буфера обмена для любого из предложений, упомянутых здесь, чтобы работать. Мой не был настроен таким образом на Mac OS X по умолчанию, и мне пришлось перестроить vim. Используйте эту команду, чтобы узнать, есть ли у вас это или нет vim --version | grep 'clipboard'. +clipboard означает, что вы хорошо, и предложения здесь будут работать для вас, в то время как -clipboard означает, что вы должны перекомпилировать и пересобрать ВИМ.

подводя итоги и сделать его проще для новичков,

чтобы скопировать текущую строку, в командном режиме введите:

"*yy

скопировать весь файл/буфер, в командном режиме, перейдите к началу через gg тип

"*yG

как уже отмечалось, для этого требуется +clipboard из vim --version, которые указывают на наличие поддержки буфера обмена, -clipboard значит нет.

Я не смог скопировать в систему буфера обмена, потому что у меня было это в моем ~/.файл vimrc:

 if has('mouse')
   set mouse=a
 endif

но если вы добавите эту строку дальше, это позволит вам просто Ctrl+c чтобы получить то, что вы выбрали в буфер обмена.

vmap <C-c> "+y

оригинальное Обсуждение и более подробная информация:копировать текст из vim с помощью set mouse=a enabled

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



Обновленный Метод:

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

  1. скопируйте текст [диапазон] vim в систему буфер. (Подсказка: используйте v или V чтобы сначала выбрать диапазон, а затем ввести двоеточие : для активации команды Ex):
    :[range]yank +
    например,
    :5,10y * (копировать / дергать строки 5-10 в системный буфер обмена * Регистрация)

  2. вставьте содержимое из системного буфера обмена в vim на новой строке:
    :put +

решение для меня было установить дополнительный vim, который имеет опцию буфера обмена включены:

sudo apt-get install vim-gnome

Если вы используете GVim, вы также можете set guioptions+=a. Это вызовет автоматическое копирование в буфер обмена текста, который вы выделите в визуальном режиме.
Недостаток: обратите внимание, что продвинутые менеджеры буфера обмена (с историей) в этом случае получат всю вашу историю выбора...

Если ваш vim будет скомпилирован без +xterm_clipboard опция, как это по умолчанию в Debian и я думаю Ubuntu, вы можете передать выбор или весь буфер во внешнюю программу, которая обрабатывает буфер обмена рабочего стола. Ибо xclip (который вам может понадобиться установить ранее), команда будет :w !xclip -sel clip

Для Ubuntu-Июль 2018

использовать регистр "+ копировать в системный буфер обмена (т. е. " +y вместо y).

аналогично вы можете вставить "+ чтобы получить текст из системного буфера обмена (т. е. " +p вместо p).

вы также должны убедиться, что vim компилируется с поддержкой буфера обмена. Попробуйте:

vim --version | grep .xterm_clipboard -o 

и если это - xterm_clipboard (минус префикс), то вы делаете не поддержка.

вот некоторые инструкции для замены с рабочей версией vim, которая имеет поддержку буфера обмена.

  • $ sudo apt-get purge vim
  • $ sudo apt-get autoremove (удаляет любые посторонние пакеты зависимостей vim из системы)
  • $ sudo apt-get install vim-gnome

проверьте еще раз с vim --version | grep .xterm_clipboard -o и вы можете подтвердить буфер обмена теперь доступен (т. е. +xterm_clipboard)

удачи.

вы можете найти ответы здесь Arch Wiki

Для Linux: Прежде всего, вы должны включить буфер обмена в вашей версии vim, установив gvim.


Далее вы должны поставить эту строку на свой .

set clipboard=unnamedplus

может быть, кто-то найдет его полезным. Я хотел оставаться независимым от буфера обмена X и по-прежнему иметь возможность копировать и вставлять текст между двумя запущенными Vim. Этот маленький код сохраняет выделенный текст в temp.txt-файл для копирования. Поместите код ниже в свой .vimrc. Используйте сочетание клавиш Ctrl-С и ctrl-v, чтобы сделать работу.

vnoremap: w !cp/dev/null ~ / temp.txt & & cat > ~ / temp.txt

noremap: r !cat ~ / temp.txt

  1. поставить set clipboard=unnamed в своем vimrc.
  2. выберите, что вы хотите скопировать в Visual режим (нажмите v для входа).
  3. на Normal режим (нажмите escape[esc]), нажмите y для копирования.
  4. если вы хотите вставить что-то из буфера обмена ОС, нажмите p/P в Vim Normal режим.

если у вас есть xclip простой способ копирования текста в буфер обмена выглядит следующим образом:

  1. дергать текст, который вы хотите скопировать. (y команда в vanilla vim)
  2. тип :call system("xclip -selection clipboard", @")

:call system() запускает команду терминала. Он принимает два аргумента: первый-команда,второй-что передать этой команде. Например :echom system("head -1", "Hello\nWorld") возвращает Привет (с подкладкой). echom возвращает вывод команды, call-нет.

xclip -selection clipboard просто копирует текст в системный буфер обмена, а не в буфер обмена по умолчанию X (доступ к нему осуществляется с помощью средней кнопки moue).

@" возвращает последний восстановленный текст. "это регистр по умолчанию, но вы можете использовать любой регистр. Чтобы просмотреть содержимое всех регистров, типа :registers.

в vim только под терминалом ubuntu,

пресс shift + drag mouse чтобы выбрать текст в vim, то ctrl + shift + c терминал

затем ctrl + v на другой редактор

Я Vim newby но, чтобы скопировать весь текст в системный буфер обмена (например, если вы хотите вставить его в текстовый процессор или другой текстовый редактор, как gedit, коврик для мыши и т.д...), в обычном режиме:

ggVGy

или, более просто:

:%y

как и предполагалось, я также установил vim-gtk и поставить

установить буфер обмена=unnamedplus

в моем .vimrc

и все работает отлично

Если вы хотите скопировать только часть текста, используйте визуальный режим (v) выберите текст, который вы хотите скопировать, и нажмите клавишу y.

наконец, я предлагаю программу буфера обмена, такую как Clipman (мой любимый), Clipit, Parcellite или аналогичный.

(Я использую vim 8.0 в Debian Stretch Xfce)

ПРОСТИ МЕНЯ ЗА МОЙ АНГЛИЙСКИЙ! : -)

Я написал простую строку в моем .vimrc, чтобы получить копию работы. Надеюсь, это кому-то поможет. К сожалению, мой vim не установлен с поддержкой буфера обмена, поэтому ни одно из этих предложений не сработало для меня. В принципе, вставьте эту строку в свой .vimrc:

map <C-c> y:e ~/clipsongzboard<CR>P:w !pbcopy<CR><CR>:bdelete!<CR>

Если вы хотите читать подробности о том, что это делает, вы можете прочитать об этом на мой блог

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

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

в случае, если вы не хотите использовать любой графический интерфейс для Vim и вы предпочитаете придерживаться эмулятор терминала может быть гораздо более простой подход к этой проблеме. Вместо того, чтобы использовать yank или что-то подобное, сначала взгляните на документацию терминала, который вы используете. Я боролся с той же проблемой (пытаясь использовать +буфер обмена и xclip и так далее), и в конце концов оказалось, что в моем эмуляторе терминала достаточно просто нажать shift и выбрать любой текст, который вы хотите скопировать. Вот и все. Достаточно просто и не нужно возиться с настройками. (Кстати, я использую urxvt).

Если вы подключаетесь к системе unix через putty, то выполните следующие действия, чтобы скопировать содержимое файла

  • Выделите текст, который вы хотите скопировать (вы сможете копировать страницу за страницей )
  • нажмите ctrl+c ( он скопирует текст в буфер обмена
  • вставить в любой внешний редактор Сделано

selecting с помощью mouse и right-click copy работала в моем случае.

Я не хотел, чтобы номера строк были включены, поэтому я :set nonumber до copying.

у меня была проблема, потому что мой vim не поддерживал буфер обмена:

vim --version | grep clip
-clipboard       +insert_expand   +path_extra      +user_commands
+emacs_tags      -mouseshape      +startuptime     -xterm_clipboard

Я установил vim-gnome (который поддерживает буфер обмена), а затем снова проверил:

vim --version | grep clipboard
+clipboard       +insert_expand   +path_extra      +user_commands
+emacs_tags      +mouseshape      +startuptime     +xterm_clipboard

теперь я могу копировать и вставлять с помощью "+y и "+p соответственно.

ничего выше не работало для меня на моем ноутбуке windows.

Ctrl+C было хорошо для копирования.. но мне нужно Shift+вставить вставить !

(хорошая причина, чтобы всегда получить ноутбук, где вставить всегда можно получить доступ без нажатия вторичной клавиши)

для OSX, как и ответы 10342 выше, вам нужно убедиться, что vim поддерживает функцию буфера обмена, сказал тот, который поставляется с OSX, не поддерживает буфер обмена, и что если вы запустите brew install vim он будет работать.

за исключением того, что запуск vi все равно заставит вас запустить предварительную версию OSX, а не ту, которую вы установили из brew.

чтобы преодолеть это, я просто сгладил свою команду vim до версии brew, а не по умолчанию OSX один:

alias vim="/usr/local/Cellar/vim/8.0.1100_1/bin/vim"

и теперь я Золотой

Comments

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