В отличие от других редакторов, vim хранит скопированный текст в своем собственном буфере обмена. Поэтому мне очень сложно скопировать текст с веб-страницы и вставить его в текущий рабочий файл. Так получилось, что мне нужно либо открыть gedit, либо набрать его вручную.
Могу ли я сделать vim paste из системного буфера обмена и в него?
sudo apt-get install vim-gnome
что добавит эту функциональность к встроенному vim использования системного буфера обмена.vim-gnome
вероятно, излишне или просто недоступно в их ОС / дистрибутиве, в то время как я подозреваю , что, скорее всего, они существуют иvim-gtk
предпочитаютvim-gtk3
меньше зависимостей, в то же время обеспечивая интеграцию с буфером обмена (по крайней мере, для тех, кто все еще работает на X11; Я не уверен, как все это взаимодействует с Уэйлендом).Ответы:
"*
И"+
регистры для буфера обмена системы (:help registers
). В зависимости от вашей системы они могут делать разные вещи. Например, в системах, которые не используют X11, таких как OSX или Windows,"*
регистр используется для чтения и записи в системный буфер обмена. В системах X11 могут использоваться оба регистра. Смотрите:help x11-selection
подробности, но в основном"*
это аналог выбора PRIMARY в X11 (который обычно копирует то, что вы выбираете мышью, и вставки средней кнопкой мыши) и"+
аналогично выделению X11 CLIPBOARD (которое является собственно буфером обмена).Если все это у вас над головой, попробуйте с помощью
"*yy
или"+yy
скопировать строку в буфер обмена вашей системы. Предполагая, что у вас есть соответствующие параметры компиляции, один или другой должен работать. Вы можете переназначить это на что-то более удобное для вас. Например, вы можете вставитьvnoremap <C-c> "*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
сделать все операции удаления / удаления автоматически скопировать в системный буфер обмена. Это может быть неудобно в некоторых случаях, когда вы сохраняете что-то еще в буфере обмена, так как это переопределит его.Для вставки вы можете использовать
"+p
или"*p
(опять же, в зависимости от вашей системы и / или желаемого выбора) или вы можете сопоставить их с чем-то другим. Я печатаю их явно, но часто оказываюсь в режиме вставки. Если вы находитесь в режиме вставки, вы все равно можете вставить их с правильным отступом, используя<C-r><C-p>*
или<C-r><C-p>+
. См:help i_CTRL-R_CTRL-P
.Также стоит упомянуть параметр vim
paste
(:help paste
). Это помещает vim в специальный «режим вставки», который отключает несколько других опций, позволяя легко вставлять в vim с помощью эмулятора терминала или знакомого ярлыка вставки мультиплексора. Просто введите,:set paste
чтобы включить его, вставьте содержимое, а затем введите,:set nopaste
чтобы отключить его. Кроме того, вы можете использоватьpastetoggle
опцию для установки кода клавиши, который переключает режим (:help pastetoggle
). Я рекомендую использовать регистры вместо этих опций, но если они все еще слишком страшны, это может быть удобным обходным путем, пока вы совершенствуете свои vim отбивные.Смотрите
:help clipboard
для более подробной информации.источник
"*p
? Я нажимаю Shift- ', затем Shift-8, затем p и т. Д.?dd
к примеру. Первыйd
входит в режим ожидания оператора, затем второйd
завершает команду и удаляет строку. Однако, если вы введетеdG
текст,G
он удалит его до конца файла, а не просто удалит строку. Регистры используют этот же принцип, чтобы позволить различным командам использовать их.vim-gtk
пакет (по крайней мере, под Debian), чтобы получить скомпилированный vim+xterm_clipboard
. Мне понадобилось 40 минут, чтобы это выяснить, и всего несколько секундsudo apt-get install vim-gtk
.vim-gnome
также работает и+xterm_clipboard
включил.Вы можете скопировать в vim с помощью ярлыка gnome-терминала для вставки. Сделайте файл в режиме вставки и используйте
Ctrl+ Shift+ v.
Помните заранее, чтобы
чтобы не возиться с отступом.
источник
Linux
В моей системе Linux, то
+
и*
регистры карты к выбору X11, который можно наклеить с помощью средней кнопки мыши. Когда:set clipboard=unnamed
и:set clipboard=unnamedplus
используются, регистры отображаются в буфер обмена и могут быть вставлены с помощью CTRL-V.Специфика, кажется, в некоторой степени зависит от конфигурации и системы, поэтому ваш пробег определенно будет отличаться. Это, безусловно, должно направить вас в правильном направлении.
Смотрите также
http://vim.wikia.com/wiki/Accessing_the_system_clipboard
источник
*
в первичный регистр X11 (который обычно вставляется мышью).+
сопоставляет с регистром буфера обмена X11, обычно вставляемым ярлыками.*
для первичных и+
для буфера обмена регистров Х11, вы можете увидеть это в VIM источника: эти значения не там и не изменяются, аclip_star
иclip_plus
всегда используется*
и+
регистры соответственно.По моему эта конфигурация работает для копирования и вставки
источник
Это будут строки, которые вам нужны в вашем vimrc для этой цели:
источник
Я считаю, что этот вопрос заслуживает более объективного и графического ответа:
Вход в режим вставки
Режим выхода из пасты
Вы вставили текст и можете снова печатать.
источник
:set nopaste
ничего не делает. Что это должно делать? Зачем мне это?:set nopaste
, вы говорите редактору, что больше не хотите вставлять. И когда вы нажметеi
, вы вернетесь в режим редактирования :).буфер обмена
Существует специальный регистр для хранения этого выбора, это регистр "*. Здесь ничего не вводится, если только информация о том, какой текст выделен, не собирается измениться (например, где-то щелчком левой кнопки мыши) или когда другое приложение хочет вставить выделенный текст. Затем текст помещается в регистр "*. Например, чтобы вырезать линию и сделать ее текущим выделением / поместить ее на КЛАПАН:
Точно так же, когда вы хотите вставить выделение из другого приложения, например, нажав среднюю кнопку мыши, выделение сначала помещается в регистр «*», а затем «помещается», как любой другой регистр. Например, чтобы поместить выделение (содержимое КЛАПАНА):
регистры E354
Вставить из буфера обмена
Проверьте поддержку X11-буфера обмена в терминале
Если вы хотите запустить Vim в терминале, вам нужно искать версию Vim, которая была скомпилирована с поддержкой буфера обмена. Проверьте наличие поддержки X11-буфера обмена с консоли, введите:
Если вы видите «+ xterm_clipboard», вы можете идти.
http://vim.wikia.com/wiki/Accessing_the_system_clipboard
http://linux.die.net/man/1/xsel
источник
Я попробовал приведенные выше предложения, и ни одно из них не сработало в моей среде. (Windows PuTTY клонируется через ssh)
Появилось несколько дополнительных поисков: /unix/110684/copy-paste-into-sshd-vim-from-local-windows-clipboard
В одном из комментариев предлагалось использовать,
SHIFT+INSERT
что помогло вставить из буфера обмена моего рабочего стола в буфер Vim.Ctrl-C
уже работал, чтобы скопировать в буфер обмена рабочего стола от Vim.источник
SHIFT+INSERT
работает, потому что это опция вставки для вашего терминала (или в вашем случае PuTTY); однако отступ, скорее всего, будет неправильным. Проверьте последний абзац моего ответа оpaste
возможности исправить это.SHIFT+INS
работает с хоста linux на ssh vim, а также выполняет третий щелчок мышью.У меня не было + буфера обмена, поэтому я нашел это альтернативное решение с использованием xsel:
Добавьте к вашему ~ / .vimrc:
vnoremap <C-C> :w !xsel -b<CR><CR>
источник
vnoremap <C-C> :w !xclip -i -sel c<CR><CR>
Краткое примечание для людей, чья установка vim не поддерживает регистры * и +. Нет необходимости загружать новую установку vim для вставки из буфера обмена. Вот альтернативный метод:
1) Установите parcellite (менеджер буфера обмена с небольшим объемом памяти);
2) В вашем файле .vimrc добавьте следующее:
3) Перезапустите vim.
Теперь, когда вы наберете: Clip в качестве команды ex, содержимое буфера обмена будет вставлено в курсор. Вы также можете сопоставить новую команду с функциональной клавишей, чтобы можно было сделать это одним нажатием клавиши.
источник
Это работает для меня: Ctrl+ Shift+V
источник
Самое простое решение этого, которое также работает между различными машинами Linux через
ssh
:Проверьте , правильно ли VIM поддерживает X-11 буфер обмена:
vim --version | grep clipboard
. Если он сообщает,-clipboard
и-xterm_clipboard
вы должны установить либоvim-gtk
илиvim-gnome
(gvim на Arch Linux)Добавьте следующие строки в ваш
.vimrc
:ssh -Y machine
Теперь копирование и вставка должны работать точно так же, как и ожидалось, на одном и на разных компьютерах, используя только
y
yank иp
paste. Обратите внимание, изменить.vimrc
на всех машинах, где вы хотите использовать эту функцию.источник
Я столкнулся с этой проблемой на Macbook Pro середины 2017 года, работающего
vim
вiTerm2
качестве основной среды разработки.Как подсказали другие ответы, я побежал
vim --version
и заметил, что он возвращается-clipboard
, что означает, что версияvim
, поставляемая с моим компьютером, не была скомпилирована с опцией буфера обмена.homebrew
Пакетvim
появится компилировать сclipboard
опцией, так что исправление для меня было:brew install vim
set clipboard+=unnamed
в мой~/.vimrc
файлiTerm2
источник
Копировать в буфер обмена ОС
Выделите текст в визуальном режиме, нажмите
"*y
Вставить из буфера обмена ОС
Нажмите
"*p
источник
Следуя ответу Коннера, это было здорово, но
C-R C-p +
иC-R C-p *
в режиме вставки немного неудобно. То же самое"*p
и"+p
из командного режима.гуру VIM предложил следующее, чтобы сопоставить
C-v
с тем, чтоC-r C-p +
делает.источник
Если вы используете vim в MAC OSX, к сожалению, он поставляется с более старой версией и не соответствует параметрам буфера обмена. К счастью, доморощенный может легко решить эту проблему.
установить vim:
brew install vim --with-lua --with-override-system-vim
установить графический интерфейс vim:
brew install macvim --with-lua --with-override-system-vim
перезапустите терминал для вступления в силу.
добавить следующую строку
~/.vimrc
set clipboard=unnamed
теперь вы можете скопировать строку в vim
yy
и вставить ее в масштабе всей системы.источник
Если вы используете мышь, сначала сделайте
Тогда
right click mouse
и содержимое в буфере будет вставленоисточник
Вдобавок к настройке
:set clipboard=unnamed
, вы должны использовать то,mvim -v
что вы можете использовать,brew install macvim
если вы используете vim на Terminal.app в Mac OS X 10.9. Vim по умолчанию не поддерживает параметр буфера обмена.источник
Также стоит упомянуть, что в OSX с использованием Vim вы можете выбрать текст с помощью мыши, Cmd-C для копирования в системный буфер обмена OSX, и скопированный текст будет доступен в буфере обмена вне Vim.
Другими словами, OSX обращается с ним, как с обычным окном, и здесь очень полезна кнопка Apple «Command».
Б-30
источник
Основываясь на ответе @ lis2, я использую более простую конфигурацию, которая не будет принудительно включать режим вставки в конце:
Помните, что все эти переопределения отображений Vim по умолчанию:
v_CTRL-C
: остановить Визуальный режимv_CTRL-X
: вычесть [количество] из числаv_CTRL-V
: блочный визуальный режимi_CTRL-V
: вставьте следующую нецифровую букву, которая также сопоставленаi_CTRL-Q
В качестве альтернативы, можно использовать клавиши вдохновленные в «рывком», «Удалить» и «пут» ВИМ глаголы:
<C-y>
,<C-d>
и<C-p>
соответственно. Это переопределит только одно сопоставление по умолчанию:i_CTRL-P
: обратный поиск по ключевым словам для завершенияисточник
Другие решения хороши, если вы хотите изменить свой vimrc и т. Д. Однако я хотел простой способ скопировать из vim на мою системную клавиатуру. Это то, что я придумал.
v
:
(он автоматически развернется, чтобы показать:'<,'>
)y *
илиy +
(в зависимости от вашей системы), чтобы вернуть выделенный текст в системный буфер обмена.источник
Что вам действительно нужно, так это EasyClip . Это сделает именно это и многое другое ...
источник
Так как vim 8 правой кнопкой мыши включает визуальный режим по умолчанию. Это предотвращает «нормальное» копирование и вставку (назовите его «дефектом по дизайну» https://github.com/vim/vim/issues/1326 ). Исправьте это, выполнив:
echo "set mouse-=a" >> ~/.vimrc
,Выйдите и перезапустите vim.
источник
С 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, установленные больше. Эта функция называется «вставка в скобках». Для получения дополнительной информации см. Отключение автоматического отступа при вставке текста в vim.источник
Когда я использую мой Debian vim, который не интегрирован с Gnome (vim --version | grep clip # не показывает поддержки буфера обмена), я могу копировать в буфер обмена после удерживания клавиши Shift и выделения текста с помощью мыши, как и с любым другим другая программа проклятий. Как я понял из комментария @Conner, это терминал (gnome-терминал в моем случае), который отключает свои сообщения о событиях мыши, когда он чувствует мое нажатие Shift. Я предполагаю, что программы на основе curses могут получать события мыши после отправки определенной последовательности Escape на терминал.
источник
Если вы находитесь в Windows и хотите вставить содержимое системного буфера обмена, используя
p
эту команду, введите эту команду.Это решило мою проблему.
источник
Есть два простых способа сделать это. Переведите ваш файл в режим вставки и 1) нажмите среднюю кнопку (колесо прокрутки) на вашей мыши или 2) Ctrl + Shift + V
источник
Для некоторых международных клавиатур вам может понадобиться нажать "+, Spaceчтобы получить
"
.Так что в этом случае вам придется нажимать "Space+yили "Space*yкопировать.
И "Space+pили " Space*pвставить.
источник
Я использовал ответ NM Pennypacker и установил vim через homebrew для MacBook Pro начала 2011 года:
Теперь я также могу использовать регистр "* для копирования и вставки текста в vim. Мне даже не нужно было что-то менять в моем файле ~ / .vimrc или в $ PATH. Homebrew добавил символические ссылки в / usr / local / bin, например vim -> ../Cellar/vim/8.1.2350/bin/vim.
Альтернатива, которая работала раньше, состоит в том, чтобы скопировать некоторые строки текста в vim, пометив его мышью и используя копирование и вставку (cmd + c, cmd + v) на Mac. Эта опция работает, только если текст, который вы хотите скопировать и вставить, имеет меньший размер, чем размер окна vim. Если вы хотите скопировать весь текст в vim, отметив все окно или используя cmd + a, это скопирует другие части консоли, написанные до запуска vim, что очень раздражает.
Итак, я счастлив, что нашел новый метод с помощью регистра Clippboard.
источник