Когда я открываю Vim с терминала, копирую текст в системный буфер обмена и выйдя из Vim, системный буфер обмена очищается.Запретить Vim очистить буфер обмена при выходе
Как сохранить скопированный текст в буфер обмена?
Когда я открываю Vim с терминала, копирую текст в системный буфер обмена и выйдя из Vim, системный буфер обмена очищается.Запретить Vim очистить буфер обмена при выходе
Как сохранить скопированный текст в буфер обмена?
синтезирующий ответы от superuser, просто добавьте следующую строку в ваш .vimrc
autocmd VimLeave * call system("xsel -ib", getreg('+'))
Он не делает точно, что хочет TS: он сохраняет значение регистра по умолчанию в буфер обмена, а не в регистре буфера обмена. Вы должны использовать 'getreg ('+')'. – ZyX
Вы правы, у меня есть вещи в другом месте моего vimrc, который синхронизирует два ... – Matt
Спасибо за работу вокруг Matt и Z YX. Это требует установки «xsel». Я использовал getreg ('+'). – gimley
Пожалуйста, исправьте меня, если я ошибаюсь, но из моего понимания Vim ...
1) Vim использует регистры вместо буфера обмена для хранения скопированных/вырезанных данных.
2) Эти регистры сохраняются при выходе из Vim в файле состояния, но не доступны за пределами запущенного процесса, если вручную открыть файл и проверить его содержимое
3) Сохранение материала в + Registre в то время как Vim работает позволяет вы можете вставить в другие приложения.
4) Подключив vim (CTRL-Z) вместо закрытия, эти регистры все еще доступны.
Помогает ли это?
Я могу вставить в другое окно/терминал, когда vim все еще работает. Приостановка vim с помощью ctrl + z очищает скопированный текст, например exit. – gimley
Опять же, мой опыт очень ограничен, Обычно я работаю с vi через терминал PuTTY. Суть того, что я смог узнать, заключается в том, что программа использует локальные регистры при работе для хранения данных в буфер обмена, как только приложение завершается, регистры очищаются, а данные недоступны, кроме кэш-файлы, которые он пишет при закрытии. Если это также влияет на приостановленное состояние, я ничего не могу предложить. Удачи: D – Grambot
Установка Parcellite или glipper для Gnome и Klipper для KDE.
Перезагрузите компьютер или запустите его вручную.
Я не понимаю, почему люди проголосуют за этот ответ. Это показывает, что проблема связана не только с тем, как ведет себя Vim - она затрагивает многие приложения. Ссылка показывает, как устранить проблему для всех затронутых приложений. Чего еще можно хотеть? –
Некоторым людям, таким как я, на самом деле не нужен полный менеджер буфера обмена, потому что мы хотим, чтобы буфер обмена ушел, как только он больше не нужен (например, потому что он содержит конфиденциальные данные). К счастью, Parcellite предлагает режим демона, в котором он «просто» сохранит буфер обмена. – Kevin
Спасибо, Parcellite работает хорошо. –
на основе Matt's answer следующее использует xclip
вместо xsel
:
autocmd VimLeave * call system('echo ' . shellescape(getreg('+')) . ' | xclip -selection clipboard')
Я столкнулся с этой проблемой, и связанная с этим проблема, где подвешивания Vim с ctrl-z
также очистить буфер обмена. Я продлил Matt's solution исправить как:
set clipboard=unnamedplus
if executable("xsel")
function! PreserveClipboard()
call system("xsel -ib", getreg('+'))
endfunction
function! PreserveClipboadAndSuspend()
call PreserveClipboard()
suspend
endfunction
autocmd VimLeave * call PreserveClipboard()
nnoremap <silent> <c-z> :call PreserveClipboadAndSuspend()<cr>
vnoremap <silent> <c-z> :<c-u>call PreserveClipboadAndSuspend()<cr>
endif
if executable("xsel")
охранник есть, чтобы избежать ошибок, если xsel
не установлен. Отображение nnoremap
сохраняет буфер обмена при приостановке в нормальном режиме, а маркеры отображения vnoremap
приостанавливаются с визуальных или избранных режимов.
Я подтвердил, что это работает на vim 7.4 и 8.0.
Windows, Linux, Mac OS? – TLP
Прочитайте ответы на часто задаваемые вопросы для голосования. «Программные средства, обычно используемые программистами», не в тему. –
@TLP Это должен быть Linux. Если я не ошибаюсь, процесс следующий: 1. Вы копируете текст. 2. Vim сообщает X, что у него есть данные для буфера обмена («говорит, что у него есть данные», а не «помещает данные в буфер обмена»). 3. Вы выходите из vim. 4. X теперь не имеет понятия, где он может получить данные для буфера обмена: буфер обмена «очищен». – ZyX