Есть ли способ скопировать блок текста в системный буфер обмена, чтобы я мог вставить его в другую программу?
cpip
, cpi{
.
Есть ли способ скопировать блок текста в системный буфер обмена, чтобы я мог вставить его в другую программу?
cpip
, cpi{
.
Ответы:
Для систем на основе X11 (т. Е. Linux и большинства других UNIX- подобных систем) есть два буфера обмена, которые не зависят друг от друга:
^C
и вставляется ^V
(это как MS Windows).Системы OS X и Windows имеют только один буфер обмена.
Для систем X11 есть также ряд инструментов, которые синхронизируют эти буферы обмена для вас; поэтому, если они кажутся одинаковыми, возможно, у вас запущен один из них.
Vim имеет два специальных регистра, соответствующих этим буферам обмена:
*
использует ПЕРВИЧНЫЙ; Мнемоника: S деготь S Избранный (для копирования-on - s избранника)+
использует CLIPBOARD; мнемоника: CTRL PLUS C (для общего набора клавиш)В Windows и OS X нет разницы между +
и *
, так как эти системы имеют только один буфер обмена, и оба регистра ссылаются на одно и то же (не важно, какой из них вы используете).
Вы можете использовать эти регистры как любой регистр. Например, при использовании первичного буфера обмена *
с y
и p
командами:
"*yy
"*p
Вы можете использовать это как более удобное сочетание клавиш:
noremap <Leader>y "*y
noremap <Leader>p "*p
noremap <Leader>Y "+y
noremap <Leader>P "+p
Если вы хотите «автоматически» взаимодействовать с системным буфером обмена вместо того, чтобы постоянно обращаться к нему вручную, вы можете установить clipboard
переменную:
unnamed
для использования *
(ПЕРВИЧНЫЙ, на выбор)unnamedplus
использования +
(CLIPBOARD, ^C
)Теперь просто использование yy
перейдет в буфер обмена системы, а не в безымянный регистр Vim, и p
вставит буфер обмена системы.
Вы также можете назначить эти регистры, как и любой регистр let
:
:let @+=42
:let @*=42
У clipboard
настройки есть еще несколько опций (например, фильтры исключения); но это основы. Смотрите :help 'clipboard'
для полной истории ;-)
Если вы используете gVim, вы можете получить поведение копирования при выборе
:set guioptions+=a
.
Это включено по умолчанию в системах X11 (копирует в ПЕРВИЧНЫЙ), но не в MS Windows и OSX (так как выбор любого текста переопределит ваш буфер обмена).
+clipboard
?Vim требует +clipboard
флаг функции, чтобы все это работало; Вы можете проверить, есть ли в Vim это, используя :echo has('clipboard')
Vim (если вывод есть 0
, его нет , если 1
он есть) или проверив вывод
vim --version
for +clipboard
.
Большинство дистрибутивов Linux поставляются с «минимальной» сборкой Vim по умолчанию, которой нет +clipboard
, но обычно вы можете установить ее:
vim-gtk
или vim-gnome
.vim-X11
и запустите vimx
вместо vim
( подробнее ).gvim
(это будет включено и +clipboard
для обычного vim
).Можно также использовать xclip
, xcopy
или xsel
копировать текст в буфер обмена; см. следующие вопросы для решения:
Вы также можете использовать буфер обмена на удаленных компьютерах, если вы включаете пересылку X11 через SSH. Это особенно полезно с указанным выше советом, поскольку вы можете использовать его
xclip
для доступа к буферу обмена вашего рабочего стола. Vim на машине, с которой вы работаете, все еще нуждается в этой +clipboard
функции.
Это требует ForwardX11Trusted
настройки и должно выполняться только с доверенными серверами , поскольку это дает серверу практически полный контроль над сеансом X11:
$ ssh -XY myhost
Чтобы сделать эти настройки постоянными (чтобы вам не нужно было добавлять их -XY
каждый раз), вы можете сделать что-то вроде этого в вашем ~/.ssh/config
:
# Do **NOT** set this globally; it gives the server complete control over
# your X11 session.
Host myhost
ForwardX11 yes
ForwardX11Trusted yes
Neovim обновил поддержку буфера обмена. Встроенный интерфейс был удален и заменен системой , которые требуют внешних утилит , таких как xclip
, xsel
или
pbcopy
/ pbpaste
.
Следует автоматически подобрать эти утилиты и использовать их. На OS X pbcopy
и pbpaste
должен быть доступен по умолчанию, на Linux вы, вероятно, хотите установить xclip
, поскольку это наиболее широко доступно (на самом деле есть две
версии xsel
с несовместимыми флагами . Это действительно глупо).
Также смотрите :help clipboard
в Неовим.
"<Space>
чтобы получить "
. Так что в этом случае вам придется нажимать "<Space>+y
или "<Space>*y
копировать.
"
можно выбрать множество именованных регистров. "+
это не волшебство, это просто регистрация +
. Так, например, если вы хотите скопировать три вещи одновременно и вставить каждый из них один за другим, вы можете "1y
, "2y
и , "3y
а затем "1p
, "2p
и "3p
. Это действительно мощный и не существует практически в любом другом редакторе. Другое интересное использование - просмотр сохраненных макросов. Например, если вы записываете с помощью qq
, но понимаете, что вам нужно это исправить, вы можете: во временной строке "qp
исправить это и "qd
.
Другие ответы касаются того, как скопировать текст из буфера в системный буфер обмена. Другая распространенная операция - копирование текста из другого регистра в буфер обмена. Например, если вы уже вставили некоторый текст в "
(регистр по умолчанию), вы можете загрузить этот регистр в буфер обмена.
Вы можете сделать это с :let
:
let @+=@"
- копирует регистр по умолчанию в буфер обменаlet @*=@"
- копирует регистр по умолчанию в основной выбор X11 («буфер обмена мышью»)let @+=@a
- скопировать из реестра a
в буфер обменаОбратите внимание, что это работает для регистров в целом: let @a=@b
копии регистра b
для регистрации a
.
С http://vim.wikia.com/wiki/Accessing_the_system_clipboard
set clipboard=unnamedplus
Это изменяет регистр Vim по умолчанию на +
регистр, который связан с системным буфером обмена. От :h clipboard-unnamedplus
:
clipboard-unnamedplus
unnamedplus A variant of the "unnamed" flag which uses the
clipboard register '+' (quoteplus) instead of
register '*' for all yank, delete, change and put
operations which would normally go to the unnamed
register. When "unnamed" is also included to the
option, yank operations (but not delete, change or
put) will additionally copy the text into register
'*'.
Only available with the +X11 feature.
Availability can be checked with:
if has('unnamedplus')
:version
в Vim, чтобы увидеть, появляется ли + X11 в списке включенных функций. Вы также можете проверить, доступна ли функция «unnamedplus». :if has('unnamedplus')⏎ echo 'yes'⏎ endif
Если вы не работаете в Linux, то вам следует использовать unamed вместо unnamedplus.
В тех сборках, которые его поддерживают, указанный регистр *
является системным буфером обмена. Чтобы скопировать текст из Vim в системный буфер обмена, вы можете выделить текст в визуальном режиме, а затем нажать, "*yчтобы скопировать его в системный буфер обмена.
И наоборот, используйте "*pдля вставки текста из системного буфера обмена в Vim.
Я рекомендую вам использовать Gvim и добавить это к себе .vimrc
:
source $VIMRUNTIME/mswin.vim
behave mswin
Это обеспечивает поддержку для CtrlC, CtrlX, CtrlVкак блокнот в Windows.
Обратите внимание , что это будет также добавить некоторые другие общие ярлыки Windows , например, CtrlSдля :w
, CtrlAдля выбора всех и т.д.
Каждый второй ответ охватывает все важные вещи о регистрах. Я хотел бы добавить еще одну вещь, которую я использую.
В Vim есть способ напрямую скопировать визуально выбранный текст в буфер обмена. Просто поместите это в ваш файл vimrc :
set guioptions+=a
И при этом всякий раз, когда вы визуально выделяете какой-то текст, он будет скопирован в ваш буфер обмена. Для получения дополнительной информации об этом,:help guioptions
Кстати, это только для gVim.
guioptions+=a
также упоминается в ответе Carpetsmoker.
Вы также можете использовать глобальную команду, чтобы поместить определенный шаблон в буфер обмена. Это может быть полезно в ситуациях, когда информация разбросана по файлу, а ручное копирование подвержено ошибкам и утомлению.
Сначала очистите реестр, который будет получать информацию
:let @a=""
Затем скопируйте в него все строки, содержащие шаблон
:g/pattern/yank A
Наконец передача (копирование) информации в системный буфер обмена
:let @+=@a
если вы попытаетесь скопировать каждую строку, содержащую «шаблон», непосредственно в буфер обмена, он не будет работать, потому что буфер обмена не имеет возможности добавлять новый контент, поэтому мы используем здесь обычный регистр vim для хранения всех строк, содержащих шаблон сразу, а затем положить его в буфер обмена.
OBS: Необходимо подключить регистр перед его использованием, и использование версии регистра UPPERCASE позволяет нам добавлять контент, иначе он также не будет работать.
Если вы не можете понять, как добраться +clipboard
до работы, чего я не мог по какой-то причине, тогда вы можете сделать это.
Предполагая, что вы хотите скопировать только часть файла, я делаю shift
+, v
чтобы перейти в визуальный режим и выделить только те строки, которые хочу скопировать. Тогда я делаю это.
# Linux Wayland
:'<,'>w !wl-copy
# Linux Xorg
:'<,'>w !xclip -selection clipboard
объяснение
'<,'>
- означает, что вы использовали визуальный режим для выбора диапазона (вы его не вводите)w !{cmd}
- напишите диапазон к стандарту cmd
, см. больше в:help w_c
wl-copy
и xclip
программы, к которым вы можете передавать текст, и они добавят его в буфер обмена вашей системыКроме того, как только это входит в вашу историю, вам не нужно вводить все заново. Просто выберите в визуальном режиме, введите, w
затем нажмите вверх, и команда должна завершиться автоматически. Кроме того, вам также не нужно использовать визуальный режим. Вы можете установить любой диапазон, который вы хотите.