Как сделать vim-пасту из (и скопировать в) системный буфер?
В отличие от других редакторов, vim хранит скопированный текст в своем собственном буфере обмена. Поэтому мне очень сложно скопировать некоторый текст с веб-страницы и вставить его в текущий рабочий файл. Так получилось, что мне нужно либо открыть gedit, либо ввести его вручную.
Могу ли я сделать vim-пасту и из системного буфера обмена?
Ответы
Ответ 1
Регистры "*
и "+
предназначены для системного буфера обмена (:help registers
). В зависимости от вашей системы они могут делать разные вещи. Например, в системах, которые не используют X11, таких как OSX или Windows, регистр "*
используется для чтения и записи в системный буфер обмена. В системах X11 могут использоваться оба регистра. См :help x11-selection
для получения дополнительной информации, но в основном "*
аналогичен первичному выделению X11 (которое обычно копирует то, что вы выбираете мышью, и вставляет его средней кнопкой мыши), а "+
аналогично выделению X11 CLIPBOARD (которое является собственно буфером обмена).
Если все это у вас над головой, попробуйте использовать "*yy
или "+yy
чтобы скопировать строку в системный буфер обмена. Предполагая, что у вас есть соответствующие параметры компиляции, один или другой должен работать. Вы можете переназначить это на что-то более удобное для вас. Например, вы можете поместить vnoremap <Cc> "*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
или :set clipboard=unnamedplus
чтобы все операции удаления/удаления автоматически копировались в системный буфер обмена. Это может быть неудобно в некоторых случаях, когда вы сохраняете что-то еще в буфере обмена, так как это переопределит его.
Для вставки вы можете использовать "+p
или "*p
(опять же, в зависимости от вашей системы и/или желаемого выбора) или вы можете сопоставить их с чем-то другим. Я печатаю их явно, но часто оказываюсь в режиме вставки. Если вы находитесь в режиме вставки, вы все равно можете вставить их с правильным отступом, используя <Cr><Cp>*
или <Cr><Cp>+
. Смотрите :help i_CTRL-R_CTRL-P
.
Также стоит упомянуть параметр vim paste
(:help paste
). Это переводит vim в специальный "режим вставки", который отключает несколько других опций, позволяя легко вставлять в vim с помощью эмулятора терминала или знакомого ярлыка мультиплексора. Просто введите :set paste
чтобы включить его, вставьте содержимое, а затем введите :set nopaste
чтобы отключить его. Кроме того, вы можете использовать опцию pastetoggle
чтобы установить код клавиши, который переключает режим (:help pastetoggle
). Я рекомендую использовать регистры вместо этих опций, но если они все еще слишком страшны, это может быть удобным обходным путем, пока вы совершенствуете свои vim отбивные.
Смотрите :help clipboard
для более подробной информации.
Ответ 2
Вы можете скопировать в vim ярлык gnome-терминала для вставки. Сделайте файл в режиме вставки и используйте
Ctrl + Shift + v.
Помните заранее, чтобы
:set paste
чтобы не возиться с отступом.
Ответ 3
Linux
В моей системе Linux регистры +
и *
записываются в список X11, который можно вставить с помощью средней кнопки мыши. Когда используются :set clipboard=unnamed
и :set clipboard=unnamedplus
, регистры отображаются в буфер обмена и могут быть вставлены с помощью CTRL-V.
Спецификации, по-видимому, несколько зависят от конфигурации и системы, поэтому ваш пробег определенно будет меняться. Тем не менее, это должно обязательно указывать в правильном направлении.
См. также
http://vim.wikia.com/wiki/Accessing_the_system_clipboard
Ответ 4
Для моей конфигурации для копирования и вставки
" copy and paste
vmap <C-c> "+yi
vmap <C-x> "+c
vmap <C-v> c<ESC>"+p
imap <C-v> <ESC>"+pa
Ответ 5
Для этой цели вам понадобятся строки, которые вам нужны в вашем vimrc:
set clipboard+=unnamed " use the clipboards of vim and win
set paste " Paste from a windows or from vim
set go+=a " Visual selection automatically copied to the clipboard
Ответ 6
Я считаю, что этот вопрос заслуживает более объективного ответа.
Вход в режим вставки
- ESC
- : установить пасту
- нажмите i
- SHIFT + Insert (с текстом, скопированным в буфер обмена)
Режим выхода из пасты
- ESC
- : установить nopaste
- нажмите i
Вы вставили текст и можете снова печатать.
Ответ 7
буфер обмена
Существует специальный регистр для хранения этого выбора, это регистр "*. Здесь ничего не вводится, если только информация о том, какой текст выделен, не собирается измениться (например, где-то щелчком левой кнопки мыши) или когда другое приложение хочет вставить выделенный текст. Затем текст помещается в регистр "*. Например, чтобы вырезать линию и сделать ее текущим выделением/поместить ее на КЛАПАН:
"*dd
Точно так же, когда вы хотите вставить выделение из другого приложения, например, нажав среднюю кнопку мыши, выделение сначала помещается в регистр "*", а затем "помещается", как любой другой регистр. Например, чтобы поместить выделение (содержимое КЛАПАНА):
"*p
регистры E354
> There are nine types of registers:
> 1. The unnamed register ""
> 2. 10 numbered registers "0 to "9
> 3. The small delete register "-
> 4. 26 named registers "a to "z or "A to "Z
> 5. four read-only registers ":, "., "% and "#
> 6. the expression register "=
> 7. The selection and drop registers "*, "+ and "~
> 8. The black hole register "_
> 9. Last search pattern register "/
Вставить из буфера обмена
1. Clipboard: Copy
2. Vim insertmode, middle mouse key
Проверьте поддержку X11-буфера обмена в терминале
Если вы хотите запустить Vim в терминале, вам нужно найти версию Vim, которая была скомпилирована с поддержкой буфера обмена. Проверьте наличие поддержки X11-буфера обмена с консоли, введите:
% vim --version
Если вы видите "+xterm_clipboard", вы можете идти.
http://vim.wikia.com/wiki/Accessing_the_system_clipboard
X-сервер поддерживает три варианта выбора:
ПЕРВИЧНАЯ, ВТОРИЧНАЯ И КЛИПАТОРСКАЯ
ПЕРВИЧНЫЙ выбор обычно используется для осуществления копирования и вставки с помощью средней кнопки мыши. Выбор SECONDARY и CLIPBOARD реже используется прикладными программами.
http://linux.die.net/man/1/xsel
Ответ 8
Я пробовал предложения выше, и никто из них не работал в моей среде. (Windows PuTTY clone over ssh)
Появилась еще одна дополнительная поисковая система:
https://unix.stackexchange.com/questions/110684/copy-paste-into-sshd-vim-from-local-windows-clipboard
Один из комментариев, предложенный с использованием SHIFT+INSERT
, который сделал трюк для вставки из моего рабочего стола в буфер Vim. Ctrl-C
уже работал над копированием в буфер обмена на рабочем столе от Vim.
Ответ 9
У меня не было + буфера обмена, поэтому я придумал это альтернативное решение, используя xsel:
Добавьте к своему ~/.vimrc:
vnoremap <C-C> :w !xsel -b<CR><CR>
Ответ 10
Быстрая заметка для людей, чья установка vim не поддерживает регистры * и+. Нет необходимости загружать новую установку vim для вставки из буфера обмена. Вот альтернативный метод:
1) Установите parcellite (менеджер буфера обмена с низкой площадью памяти);
2) В файле .vimrc добавьте следующее:
command Clip r !parcellite -c
3) Перезапустите vim.
Теперь, когда вы вводите: Clip как команду ex, содержимое буфера обмена будет вставлено в курсор. Вы также можете сопоставить новую команду с функциональным ключом, чтобы иметь возможность сделать это одним нажатием клавиши.
Ответ 11
Это работает для меня: Ctrl + Shift + V
Ответ 12
Следуя ответам Conner, это было здорово, но C-R C-p +
и C-R C-p *
в режиме вставки немного неудобно. Тоже "*p
и "+p
из командного режима.
Гуру VIM предложил следующее отобразить C-v
на то, что делает C-R C-p +
.
У вас может быть :inoremap <C-v> <C-o>"+p
только для режима вставки
если вы действительно хотели переопределить поэтапный визуальный режим (не рекомендованный им как визуальный режим хороший) у вас может быть map <C-v> "+p
Ответ 13
Если вы используете vim в MAC OSX, к сожалению, он поставляется со старым версией и не соответствует настройкам буфера обмена. К счастью, доморощенный может легко решить эту проблему.
установить 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
и вставить ее в системную область.
Ответ 14
В верхней части настройки :set clipboard=unnamed
вы должны использовать mvim -v
, который вы можете получить с помощью brew install macvim
, если вы используете vim на Terminal.app в Mac OS X 10.9. По умолчанию vim не поддерживает настройку буфера обмена.
Ответ 15
Также стоит упомянуть, что в OSX с помощью Vim вы можете выбрать текст с помощью мыши Cmd-C для копирования в системный буфер обмена OSX, а скопированный текст будет доступен в буфере обмена вне Vim.
Другими словами, OSX рассматривает его так, как будто это обычное окно, и именно здесь очень удобна кнопка "Command" Apple.
В-30
Ответ 16
Основываясь на ответе @lis2, я использую более простую конфигурацию, которая не будет принудительно вставлять режим Insert в конце:
" Copy and paste
if has('clipboard') && !has('gui_running')
vnoremap <C-c> "+y
vnoremap <C-x> "+d
vnoremap <C-v> "+p
inoremap <C-v> <C-r><C-o>+
endif
Помните, что все эти переопределяют сопоставления Vim по умолчанию:
-
v_CTRL-C
: остановить визуальный режим
-
v_CTRL-X
: вычесть [count] из числа
-
v_CTRL-V
: в блочном режиме Визуальный режим
-
i_CTRL-V
: вставить следующий незначный буквально, который также отображается на i_CTRL-Q
В качестве альтернативы можно использовать клавиши, вдохновленные "янки", "удалить" и "поместить" глаголы Vim: <C-y>
, <C-d>
и <C-p>
соответственно. Они будут отменять только одно сопоставление по умолчанию:
-
i_CTRL-P
: обратное поисковое ключевое слово для завершения
Ответ 17
Что вам действительно нужно, EasyClip. Он будет делать это и многое другое...
Ответ 18
Простейшим решением этого, которое также работает между различными машинами Linux через ssh
, является:
-
Проверьте, поддерживает ли vim буфер обмена X-11: vim --version | grep clipboard
. Если он отчитывается -clipboard
и -xterm_clipboard
, то вы должны установить либо vim-gtk
, либо vim-gnome
(gvim на arch linux)
-
Добавьте следующие строки в .vimrc
:
set clipboard=unnamedplus
set paste
- Если вы заходите на другую машину через ssh, используйте опцию -Y:
ssh -Y machine
Теперь копирование и вставка должны работать точно так, как ожидалось, на одном и разных машинах, используя y
для yank и p
для вставки. NB измените .vimrc
на всех машинах, где вы хотите использовать эту функцию.
Ответ 19
С 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.
Ответ 20
Когда я использую свой Debian vim, который не интегрирован с Gnome (vim -version | grep clip # не показывает поддержку буфера обмена), я могу скопировать в буфер обмена, удерживая клавишу Shift и выбрав текст с помощью мыши, просто как с любой другой программой проклятий. Как я понял из комментария @Conner, это терминал (гном-терминал в моем случае), который отключает отчет о событиях мыши, когда он воспринимает мое нажатие Shift. Я предполагаю, что программы на основе проклятий могут принимать события мыши после отправки определенной последовательности Escape на терминал.
Ответ 21
Если вы находитесь в окнах и хотите вставить содержимое системного буфера обмена с помощью p
, введите эту команду.
:set clipboard = unnamed
Это решило мою проблему.
Ответ 22
Есть два простых способа сделать это. Сделайте свой файл в режиме вставки и
1) нажмите среднюю кнопку (колесо прокрутки) в вашей мыши или
2) Ctrl + Shift + V
Ответ 23
Для некоторых международных клавиатур вам может потребоваться нажать " + Space, чтобы получить "
.
Поэтому в этом случае вам нужно будет нажать " Space + y или " Space * y.
И " Space + p или " Space * p для вставки.
Ответ 24
Другие решения хороши, если вы хотите изменить vimrc и т.д. Однако мне нужен простой способ скопировать с vim на мою системную клавиатуру. Это то, что я придумал.
- Выберите текст, который вы хотите скопировать, с помощью визуального режима
v
- Нажмите
:
(он автоматически откроется, чтобы показать :'<,'>
)
- Введите
y *
или y +
(в зависимости от вашей системы), чтобы вынуть выделенный текст в системный буфер обмена
Ответ 25
Вам нужно сделать три вещи:
Запустите MacVim в терминале
Установите macvim, как хотите. Я использовал homebrew:
brew install macvim
Добавьте символическую ссылку, чтобы можно было блаженно печатать vim
:
ln -s /usr/local/bin/mvim /usr/local/bin/vim
ll /usr/local/bin | grep vim
lrwxr-xr-x 1 max admin 19B Mar 1 15:49 vim -> /usr/local/bin/mvim
Подробнее об этом можно узнать в этом сообщении .
Скажите macOS, чтобы выполнить поиск /usr/local/bin
до /usr/bin
PATH переменная - это список каталогов, которые macOS ищет для поиска двоичных файлов. Мы хотим, чтобы macOS нашла нашу символическую ссылку до того, как она найдет систему vim
. Эта конфигурация находится внутри файла /etc/paths
:
$ sudo vim /etc/paths
Password:
$ cat /etc/paths
/usr/local/bin
/usr/bin
/bin
/usr/sbin
/sbin
$ which vim
/usr/local/bin/vim
Подробнее об этом можно узнать в
Добавить конфигурацию в файл ~/.vimrc
Добавьте следующую строку в файл ~/.vimrc
:
set clipboard=unnamed
Подробнее об этом можно узнать на vim wiki
Теперь операции, такие как yy
, D
и P
, работают с системным буфером обмена. Не нужно префикс их с помощью "+
или "*
.
Ответ 26
Если вы используете мышь, сначала сделайте
:set paste
Затем right click mouse
и содержимое буфера будет вставлено
Ответ 27
Так как vim 8 правой кнопкой мыши включает визуальный режим по умолчанию. Это предотвращает "нормальное" копирование и вставку (назовите его "дефектом по замыслу" https://github.com/vim/vim/issues/1326). Исправьте это, выполнив:
echo "set mouse-=a" >> ~/.vimrc
.
Выйдите и перезапустите vim.
Ответ 28
Я столкнулся с этой проблемой на Macbook Pro середины 2017 года, в котором iTerm2
работал с vim
в качестве основной среды разработки.
Как предлагали другие ответы, я запустил vim --version
и заметил, что он возвращает -clipboard
, что означает, что версия vim
, поставляемая с моей машиной, не была скомпилирована с опцией буфера обмена.
Пакет homebrew
для vim
видимому, компилируется с опцией clipboard
, поэтому для меня было исправлено следующее:
- Запустить
brew install vim
- Добавить
set clipboard+=unnamed
в мой файл ~/.vimrc
- Закройте и снова
iTerm2