Как скопировать в буфер обмена в Vim?
можно ли скопировать в буфер обмена прямо из Vim? yy
копирует только материал во внутренний буфер Vim. Я хочу скопировать в буфер обмена ОС. Есть ли такая команда в Vim или вы можете только дергать вещи в Vim?
26 ответов
на *
Регистрация сделает это. В 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 для их работы.
использовать регистр "+
копировать в системный буфер обмена (т. е. "+y
вместо y
).
аналогично вы можете вставить "+
для получения текста из системного буфера обмена (т. е. "+p
вместо p
).
@Jacob Dalton упомянул об этом в комментарии, но никто, похоже, не упомянул в ответе, что vim должен быть скомпилирован с поддержкой буфера обмена для любого из предложений, упомянутых здесь, чтобы работать. Мой не был настроен таким образом на Mac OS X по умолчанию, и мне пришлось перестроить vim. Используйте эту команду, чтобы узнать, есть ли у вас это или нет vim --version | grep 'clipboard'
. +clipboard
означает, что Вы хороши, и предложения здесь будут работать для вас, в то время как -clipboard
означает, что вам нужно перекомпилировать и перестроить vim.
подведение итогов и сделать его проще для новичков,
чтобы скопировать текущую строку, в командном режиме введите:
"*yy
скопировать весь файл/буфер, в командном режиме, перейдите к началу через gg
тип
"*yG
как уже отмечалось, для этого требуется +clipboard
из vim --version
, которые указывают на наличие поддержки буфера обмена, -clipboard
значит нет.
Я не смог скопировать в систему буфера обмена, потому что у меня было это в моем ~/.файл vimrc:
if has('mouse')
set mouse=a
endif
но если вы добавите эту строку далее, это позволит вам просто Ctrl+c чтобы получить то, что вы выбрали в буфер обмена.
vmap <C-c> "+y
первоначальное Обсуждение и больше деталей: копировать текст из vim с помощью мыши set=a enabled
если вы используете 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
и вставьте его в масштабах всей системы.
Обновленный Метод:
я никогда не был доволен методом set clipboard в течение многих лет. Самый большой недостаток-это испортит историю буфера обмена, даже если вы используете x
для удаления. Вот лучшее и более элегантное решение.
скопируйте текст [диапазон] vim в систему буфер. (Подсказка: используйте
v
илиV
сначала выберите диапазон, а затем введите двоеточие:
для активации команды Ex)::[range]yank +
например,:5,10y *
(копировать / дергать строки 5-10 в системный буфер обмена*
Регистрация)вставьте содержимое из системного буфера обмена в 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-C CTRL-v для выполнения задания.
vnoremap: w !cp/dev / null ~ / temp.txt & & cat > ~ / temp.txt
noremap: r !cat ~ / temp.txt
- поставить
set clipboard=unnamed
в своемvimrc
. - выберите, что вы хотите скопировать в
Visual
mode (нажмите v, чтобы войти). - на
Normal
mode (нажмите escape[esc]), нажмите y для копирования. - если вы хотите вставить что-то из буфера обмена ОС, нажмите p/P в Vim
Normal
режим.
если у вас есть xclip простой способ копирования текста в буфер обмена следующим образом:
- Yank текст, который вы хотите скопировать. (
y
команда в Ваниль vim) - тип
:call system("xclip -selection clipboard", @")
:call system()
запускает команду терминала. Требуется два аргумента: первый-команда,второй - что передать этой команде. Например :echom system("head -1", "Hello\nWorld")
возвращает Hello (с некоторым заполнением). echom возвращает вывод команды, call-нет.
xclip -selection clipboard
просто копирует текст в системный буфер обмена в отличие от буфера обмена X по умолчанию (доступ осуществляется средней кнопкой moue).
@"
возвращает последний вырванный текст. "это регистр по умолчанию, но вы можете использовать любой регистр. Чтобы просмотреть содержимое всех регистров, типа :registers
.
в vim только под терминалом ubuntu,
пресс shift + drag mouse
чтобы выбрать текст в vim, затем ctrl + shift + c
терминал
затем ctrl + v
на другой редактор
Я Vim newby, но, чтобы скопировать весь текст в системный буфер обмена (e.g Если вы хотите вставить его в текстовый процессор или другой текстовый редактор, например gedit, mousepad и т. д...), в обычном режиме:
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 через шпатлевку, выполните следующие действия, чтобы скопировать содержимое файла
- Выделите текст, который вы хотите скопировать (вы сможете копировать страницу за страницей )
- нажмите 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
он будет работать.
кроме того, что бег ви все равно заставит вас запустить preshipped OSX версии, не установлен с самогоном.
чтобы преодолеть это, я просто сгладил свою команду vim до версии brew, а не по умолчанию OSX один:
alias vim="/usr/local/Cellar/vim/8.0.1100_1/bin/vim"
и теперь я Золотой