Копировать-вставить 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

Позволяет копировать и вставлять через системный буфер обмена.