5

Когда я вчера ушел с работы, я оставил vim открытым с файлами, над которыми работал. Сегодня я работаю из дома, поэтому я подключился к VPN, и когда я собираюсь редактировать те же файлы, я получаю предупреждение о том, что с этими файлами открывается еще один текущий сеанс vim.

Я знаю, что мог бы просто принудительно выйти из системы другого пользователя, но это убило бы существующий сеанс vim. Я думаю, что все мои изменения будут сохранены в файле .swp .

Вместо этого, могу ли я взять этот существующий сеанс vim и открыть его со вторым логином? Таким образом, это наверняка сохранит все мои изменения, и мне не придется снова открывать все те же вкладки.

6 ответов6

7

Вы можете убить vim (но не используйте -9), и все ваши изменения будут сохранены в файлах .swp . Затем вы запускаете новый vim и используете Recover.

2

Как насчет использования screen или tmux в качестве альтернативы? Таким образом, когда вы закончите, вы можете отключить сеанс экрана, а затем войти в систему позже (возможно, с другого компьютера) и снова подключиться.

1

Вы правы, что принудительный выход из системы / уничтожение вашего другого vim-процесса позволит вам выбрать оставленный позади файл ".swp" и начать работать с ним. Просто проверил эту теорию, и она все равно работала на Ubuntu. Просто убедитесь, что вы выбрали опцию "Восстановить", когда она говорит, что файл подкачки уже существует.

Это должно получить любые модификации, которые не были сохранены, но я не уверен насчет другой информации о сеансе, такой как история команд.

0

reptyr: Утилита для взятия существующей работающей программы и подключения ее к новому терминалу.

От человека страницы: «reptyr это утилита для принятия существующей запущенной программы и присоединения его к новому терминалу. Запустил длительный процесс через ssh, но должен уйти и не хочет его прерывать? Просто запустите экран, используйте reptyr, чтобы захватить его, а затем завершите сеанс ssh и идите домой ».

0

Есть небольшая программа, которая называется retty , но я абсолютно не представляю, насколько она надежна.

0

Вы не можете перенять процессы, запущенные из другого терминала. Если бы вы запустили vim на экране, вы бы смогли отключить сеанс экрана и затем подключить его к другому терминалу (включая внешний через ssh).

Есть и retty , но он доступен не для всех аппаратных платформ и находится на экспериментальной стадии - в основном, на свой страх и риск.

Другой вариант - делать :mks (make session) время от времени; если затем вы убьете vim и запустите его из другого терминала, вы можете просто получить исходный файл Session.vim , созданный командой mks (или запустить vim с помощью vim -S Session.vim), и возобновить сеанс (возможно, вам придется ответить до нескольких запросов на восстановление, хотя).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .