Копировать-вставить Vim в системный буфер не так, как ожидалось
У меня болит голова, пытаясь понять, почему vim не копирует в системный буфер.
Здесь мой рабочий процесс:
vim asd
y1y
:q
vim qwe
p
В компьютереA и computerB это работает так, как я хочу: строка, вырванная из файла asd, помещается в файл qwe.
В computerC это не работает.
Все системы работают под управлением Ubuntu 8.04. У компьютераA установлен пакет vim-full, на компьютере и компьютереC установлен пакет vim. computerA имеет xorg установлен, использует диспетчер окон fluxbox и доступен локально. computerB и computerC не имеют X, и я вникаю в их оба.
Я много читал и думал, что это потому, что computerC был скомпилирован с -clipboard, но я запускал vim -version на всех трех компьютерах и только computerA был скомпилирован с + буфером обмена.
Я пропустил что-то очевидное? Я считаю, что пользователь .vimrc и глобальные файлы vimrc совпадают. Я могу опубликовать вывод vim -version и содержимого файлов vimrc, если это поможет.
Ответы
Ответ 1
Vim по умолчанию не копирует в системный буфер. Единственный способ, чтобы он помнил содержимое, - это то, что несколько экземпляров vim используют один и тот же файл .viminfo. Возможно, файл .viminfo не записывается из-за прав доступа к файлу или из-за другой настройки в 'viminfo'
(опция).
Для получения дополнительной информации о конфигурации viminfo см.
:help 'viminfo'
Чтобы просмотреть текущую конфигурацию на каждом компьютере, выполните следующие действия:
:set viminfo?
В стороне, если вы хотите использовать системный буфер обмена (который должен присутствовать, поэтому вам нужно будет сделать ssh -X
), вы можете использовать:
:set clipboard+=unnamed
Затем все операции копирования и вставки будут использовать буфер выбора X11. Конечно, вам нужно, чтобы vim был скомпилирован с +clipboard
, чтобы это работало, поэтому оно не решит вашу ближайшую проблему. См:
:help 'clipboard'
для получения дополнительной информации.
Возможно, вы могли бы опубликовать результат на каждом компьютере?
:set viminfo?
:set clipboard?
Это поможет нам более детально диагностировать проблему. Не могли бы вы также попробовать:
vim asd
"ayy
:q
vim qwe
"ap
Это будет использовать регистр a
вместо ненаписанного регистра.
Ответ 2
Почему бы не использовать "+y
и "+p
, они работают напрямую с буфером буфера системы
vim asd
"+y
:q
vim qwe
"+p
Ответ 3
Взгляните в .viminfo
если последнее, что вы дернули, было hi должно содержать:
Регистры:
"" 0 LINE 0 привет
Возможно, права доступа к файлу перепутаны?
Ответ 4
Это не точно решает вашу проблему, но прекрасным решением будет
vim asd
y1y
:sp qwe
p
:q
Который откроет asd
и вырвет из него (очевидно), затем разложит qwe
, put
ваш только что-yanked элемент и закроет сплит-открытый файл. При таком подходе нет необходимости закрывать документ, над которым вы работаете, для запуска нового экземпляра Vim.
И если вам не нравится горизонтальный раскол, :vsp
делает вертикальный раскол, который иногда может быть проще читать/использовать.
Ответ 5
Хорошо, я не знаю о проблеме системного буфера, но как просто открыть новый файл с помощью :e filename
, затем вставить, а затем сохранить и :e #
вернуться к исходному файлу, если это необходимо? Да, я знаю, вкладки и расколы - это круто, но простой может справиться с этой задачей.
Вы также можете использовать ex, либо из целевого файла, чтобы читать содержимое, которое должно быть включено с помощью команды :r
, предоставляющей диапазон строк, или из исходного файла для добавления выделенного текста (либо через простой номер строки/диапазон или всемогущей команды g
) с помощью :w >> filename
.
Ответ 6
Попробуйте следующее:
set clipboard=unnamed
Позволяет копировать и вставлять через системный буфер обмена.