Можно ли скопировать в буфер обмена непосредственно из Vim? yy
только копирует материал в внутренний буфер Vim. Я хочу скопировать в буфер обмена ОС. Есть ли такая команда в Vim, или вы можете всего лишь набирать вещи в Vim?
Как скопировать в буфер обмена в Vim?
Ответ 1
Регистр *
сделает это. В Windows +
и *
эквивалентны. В Unix есть небольшая разница между +
и *
:
В Windows регистры * и + эквивалентны. Для систем X11 они отличаются. Для систем X11 * - это выделение, а + - вырезанный буфер (например, буфер обмена). http://vim.wikia.com/wiki/Accessing_the_system_clipboard
*
вероятно, это то, что вы хотите большую часть времени, поэтому я использую *
потому что он работает так, как я ожидаю, в обеих средах.
В дистрибутивах Linux по какой-то причине вы должны сначала установить vim-gtk, чтобы получить функциональность буфера обмена.
А для тех, кто запутался в том, как использовать регистры, когда дергаете или кладете, вы просто пишете "
затем имя регистра. Поэтому для копирования чего-либо в регистр буфера обмена вы набираете "*y
а затем вводите тип "*p
Ответ 2
На Mac OSX
-
скопировать выбранную часть: визуально выбрать текст (тип
v
илиv
в обычном режиме mode) и введите:w !pbcopy
-
скопировать весь файл
:%w !pbcopy
-
вставить из буфера обмена
:r !pbpaste
В большинстве Linux Distros вы можете заменить:
-
pbcopy
выше сxclip -i -sel c
илиxsel -i -b
-
pbpaste
с помощьюxclip -o -sel -c
илиxsel -o -b
- Примечание.. Если ни один из этих инструментов (xsel
иxclip
) не установлен в вашем дистрибутиве, вы, вероятно, можете найти их в репозиториях
Ответ 3
В вашем файле vimrc вы можете указать автоматическое использование системного буфера обмена для копирования и вставки.
В Windows:
set clipboard=unnamed
В Linux установлен (vim 7.3.74 +):
set clipboard=unnamedplus
ПРИМЕЧАНИЕ. Возможно, вам понадобится обновленная версия Vim для работы.
Ответ 4
Используйте регистр "+
для копирования в системный буфер обмена (т.е. "+y
вместо y
).
Аналогично, вы можете вставить из "+
, чтобы получить текст из системного буфера обмена (т.е. "+p
вместо p
).
Ответ 5
@Jacob Dalton упомянул об этом в комментарии, но никто, кажется, не упомянул в ответе, что vim должен быть скомпилирован с поддержкой буфера обмена для любого из упомянутых здесь рекомендаций. Mine не был настроен таким образом на Mac OS X по умолчанию, и мне пришлось перестроить vim. Используйте эту команду, чтобы узнать, есть ли у вас это или нет vim --version | grep 'clipboard'
. +clipboard
означает, что вы хороши, и предложения здесь будут работать для вас, а -clipboard
означает, что вам нужно перекомпилировать и перестроить vim.
Ответ 6
Подведение итогов и упрощение для новичков,
Чтобы скопировать текущую строку, в режиме командной строки введите:
"*yy
Чтобы скопировать весь файл/буфер в командном режиме, сначала перейдите в начало через gg
, затем введите
"*yG
Как отмечено, для этого требуется +clipboard
out of vim --version
, которые указывают на доступность поддержки буфера обмена, -clipboard
означает no.
Ответ 7
Мне не удалось скопировать мою систему буфера обмена, потому что у меня было это в файле ~/.vimrc:
if has('mouse')
set mouse=a
endif
Но если вы добавите следующую строку, это позволит вам просто Ctrl + c получить все, что вы выбрали, в свой буфер обмена.
vmap <C-c> "+y
Оригинальное обсуждение и более подробная информация: Скопировать текст из vim с помощью set mouse = a enabled
Ответ 8
Если вы используете vim в MAC OSX, к сожалению, он поставляется с более старой версией и не соответствует параметрам буфера обмена. К счастью, доморощенный может легко решить эту проблему.
установить vim:
brew install vim
установить графический интерфейс vim:
brew install macvim
перезапустите терминал для вступления в силу.
добавьте следующую строку в ~/.vimrc set clipboard=unnamed
теперь вы можете скопировать строку в vim с помощью yy
и вставить ее для всей системы.
Обновленный метод:
Я никогда не был удовлетворен установленным методом буфера обмена в течение многих лет. Самый большой недостаток - это испортит вашу историю буфера обмена, даже когда вы используете x
для удаления. Вот лучшее и более элегантное решение.
-
Скопируйте текст [range] vim в системный буфер обмена. (Подсказка: сначала используйте
v
илиV
чтобы выбрать диапазон, а затем введите двоеточие:
для активации команды Ex)::[line-range]yank +
например,:5,10y *
(скопировать/восстановить строки 5-10 в системный буфер обмена*
зарегистрировать) -
Вставьте содержимое из системного буфера обмена в vim на новой строке:
:put +
Замечания:
- Если вы выберете диапазон слов, вышеописанное не будет работать. используйте "* y или " +y, чтобы сохранить этот визуальный блок в буфер обмена. Однако это трудно напечатать, я все еще думаю об альтернативах.
- : help "* или : help * + для получения дополнительной информации
-
brew info vim
сможет увидеть другие варианты установки vim. На данный момент у него нет других вариантов.
Ответ 9
Для 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 установить vim-gnome
Проверьте снова с vim --version | grep.xterm_clipboard -o
vim --version | grep.xterm_clipboard -o
и вы можете подтвердить, что буфер обмена теперь доступен (т.е. +xterm_clipboard)
Удачи.
Ответ 10
для меня было решение установить дополнительный vim, в который включена опция буфера обмена:
sudo apt-get install vim-gnome
Ответ 11
Если вы используете GVim, вы также можете set guioptions+=a
. Это вызовет автоматическую копию в буфер обмена текста, который вы выделите в визуальном режиме.
Недостаток: обратите внимание, что продвинутые менеджеры буфера обмена (с историей) в этом случае получат всю вашу историю выбора...
Ответ 12
Если ваш vim будет скомпилирован без опции +xterm_clipboard
, как это по умолчанию в Debian, и я думаю, Ubuntu, вы можете выбрать канал или весь буфер для внешней программы, которая обрабатывает буфер обмена для рабочего стола. Для xclip
(который вам может потребоваться установить ранее) команда будет :w !xclip -sel clip
Ответ 13
Вы можете найти ответы здесь Arch Wiki
Для Linux: Прежде всего вы должны включить буфер обмена в вашей версии vim, установив gvim
.
Затем вы должны поместить эту строку в ваш файл .vimrc
.
set clipboard=unnamedplus
Ответ 14
В vim только под терминалом ubuntu,
нажмите shift + drag mouse
, чтобы выбрать текст в vim, затем ctrl + shift + c
на терминале
затем ctrl + v
в другом редакторе
Ответ 15
Если у вас есть xclip, простой способ копирования текста в буфер обмена выглядит следующим образом:
- Янки текст, который вы хотите скопировать. (
y
команды в ванильном Vim) - Введите
:call system("xclip -selection clipboard", @")
:call system()
запускает команду терминала. Требуется два аргумента: первый - команда, второй - что передать этой команде. Например :echom system("head -1", "Hello\nWorld")
возвращает Hello (с некоторыми дополнениями). echom возвращает вывод команды, call - нет.
xclip -selection clipboard
просто копирует текст в системный буфер обмена, в отличие от буфера обмена X по умолчанию (доступ к которому осуществляется средней кнопкой moue).
@"
возвращает последний восстановленный текст." - регистр по умолчанию, но вы можете использовать любой регистр. Чтобы просмотреть содержимое всех регистров, введите :registers
.
Ответ 16
Может кто-то найдет это полезным. Я хотел остаться независимым от X буфера обмена и все еще иметь возможность копировать и вставлять текст между двумя работающими vims. Этот небольшой код сохраняет выделенный текст в файле temp.txt для копирования. Поместите код ниже в ваш .vimrc. Используйте CTRL-c CTRL-v для выполнения задания.
vnoremap: w! cp/dev/null ~/temp.txt && & && cat > ~/temp.txt
noremap: r! cat ~/temp.txt
Ответ 17
- Поместите
set clipboard=unnamed
вvimrc
. - Выберите то, что вы хотите скопировать в режиме
Visual
(нажмите v, чтобы войти). - Вернуться в режим
Normal
(нажмите escape [esc]), нажмите y для копирования. - Если вы хотите вставить что-то из буфера обмена OS, нажмите p/P в режиме Vim
Normal
.
Ответ 18
Я новичок в Vim, но, чтобы скопировать весь текст в системный буфер обмена (например, если вы хотите вставить его в текстовый процессор или другой текстовый редактор, такой как gedit, коврик для мыши и т.д.), В обычном режиме:
ggVGy
или, проще:
:% г
Как и предполагалось, я также установил vim-gtk и поставил
set clipboard = unnamedplus
в моем .vimrc
и все отлично работает
Если вы хотите скопировать только часть текста, используйте визуальный режим (v), выберите текст, который вы хотите скопировать, и нажмите клавишу y.
Наконец, я предлагаю программу с буфером обмена, такую как Clipman (мой любимый), Clipit, Parcellite или аналогичные.
(Я использую vim 8.0 в Debian Stretch Xfce)
Прости меня за мой английский! :-)
Ответ 19
Я написал простую строку в моем .vimrc, чтобы получить копию. Надеюсь, это поможет кому-то. К сожалению, мой vim не установлен с поддержкой буфера обмена, поэтому ни одно из этих предложений не сработало для меня. В принципе, вставьте эту строку в свой .vimrc:
map <C-c> y:e ~/clipsongzboard<CR>P:w !pbcopy<CR><CR>:bdelete!<CR>
Если вы хотите узнать подробности о том, что это делает, вы можете прочитать об этом на моем блоге
Ответ 20
Для некоторых международных клавиатур вам может потребоваться нажать " + Space, чтобы получить "
.
Поэтому в этом случае вам нужно нажать " Space + y или " Space * y
Ответ 21
Если вы не хотите использовать графический интерфейс для vim, и вы предпочитаете просто придерживаться терминального эмулятора, может возникнуть гораздо более простой подход к этой проблеме. Вместо того, чтобы использовать yank или что-то вроде этого, сначала взгляните на документацию терминала, который вы используете. Я боролся с той же проблемой (пытаясь использовать + буфер обмена и xclip и т.д.), И в итоге оказалось, что в эмуляторе терминала достаточно просто нажать shift и выбрать любой текст, который вы хотите скопировать. Это. Довольно просто и не нужно возиться с конфигурацией. (Кстати, я использую urxvt).
Ответ 22
У меня была проблема, потому что мой 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 соответственно.
Ответ 23
если вы подключаетесь к системе unix через шпатлевку, выполните следующие действия, чтобы скопировать содержимое файла
- Выделите текст, который вы хотите скопировать (вы сможете скопировать страницу за страницей).
- нажмите ctrl + c (он скопирует текст в буфер обмена
- вставить любой внешний редактор Готово
Ответ 24
для 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"
и теперь я золотая
Ответ 25
selecting
с помощью mouse
и right-click copy
работал в моем случае.
Мне не нужны номера строк, поэтому я :set nonumber
до copying
.
Ответ 26
Ничего выше не работало для меня на моем ноутбуке Windows.
Ctrl + C отлично подходит для копирования.. но мне нужно было Shift + Insert вставить!
(Хорошая причина всегда получать ноутбук, где Insert всегда можно получить доступ без нажатия вторичного ключа)
Ответ 27
Shift + Ctrl + C, если вы работаете в графическом режиме Linux, но сначала вам нужно выбрать то, что вам нужно скопировать.
Ответ 28
Я боролся с этим в течение многих месяцев до сих пор на MacOsX, используя сочетания клавиш. Я знаю, что вопрос не в использовании шортов для клавиатуры. Но это может помочь кому-то с тем же беспокойством.
Я обнаружил, что если вы снимите отметку:
View → Allow Mouse Reporting
из меню терминала вы сможете скопировать в буфер обмена, используя
command + c
снова.
Ответ 29
В моем случае выбор текста путем выделения (щелчка и перетаскивания) моей мышью заставлял vim переходить в визуальный режим.
В любом случае, на Mac самое простое решение - использовать fn + mouse click and drag
чтобы избежать входа в визуальный режим.
Если вы хотите избежать такого поведения по умолчанию, вы можете отредактировать ваш vimrc