Как сохранить макет окна, разделения и буфера?

56

У меня есть несколько задач, над которыми я работаю в одном хранилище. Я хотел бы создать «рабочие пространства» для работы над ними.

В одном «рабочем пространстве» или «макете буфера» все файлы, над которыми мне нужно работать, должны быть открыты в макете, который я хочу (используя ^w+v, ^w+sчтобы разделить окно).

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

Каков наилучший способ достичь этого?

Nebril
источник

Ответы:

48

Вы можете использовать vim :mksessionи записать каждое «рабочее пространство» в другой файл, а затем снова открыть сеанс, используя vim -S session_file, однако, если вы открыты для использования плагина, то я обнаружил, что плагин Startify - это именно то, что мне нужно для такого сценария: https : //github.com/mhinz/vim-startify

Он отлично справляется с управлением сессиями в vim и mccvim, а также выдает список последних файлов при открытии vim. Он автоматически изменится на правильный рабочий каталог для вас. Он также позволяет вам прикреплять файлы на начальный экран запуска, что удобно для быстрого доступа к таким вещам, как.vimrc

craigp
источник
23

Вы можете использовать плагин vim-obsession tpope, чтобы легко управлять сессиями. Это как обертка для встроенного Vim mksession, но также предоставляет множество других тонкостей.

Вы можете сохранить текущий сеанс (или макет буфера), дав команду :Obsess. Если вы не предоставите аргумент, он записывает файл сеанса, вызываемый Session.vimпо умолчанию.

Чтобы перезагрузить сеанс, используйте vim -S <session-name>или, :source <session-name>если вы уже находитесь в Vim.

Приятно то, что вам не нужно сохранять сеанс каждый раз, когда вы выходите из Vim. Это автоматически управляется плагином.

Другая очень важная особенность vim-obession - это то, что она не сохраняет настройки и карты. mksessionзахватывает текущие параметры и карты, чего не должно быть, если вы просто хотите сохранить макет буфера. Также это мешает при обновлении плагина и т. Д.

thameera
источник
Может ли он управлять несколькими файлами сеансов?
Небриль
1
@Nebril Это может. При сохранении сеанса используйте формат :Obsess <session-name>. Используйте конкретное имя сеанса, которое вы хотите при перезагрузке.
thameera
Я обнаружил, что Obsession не помнит вертикальные расщепления, а mksession -. Я только баловался с этим сегодня вечером, есть ли что-то, что я пропустил?
Baxx
1
@baxx Obsession действительно помнит все виды расколов. Может быть, вы закрыли сплит перед выходом из Vim?
thameera
2
@baxx Это старый, но я хотел добавить примечание на случай, если это поможет кому-то еще. Причина, по которой это выглядит так, как будто одержимость забывает о сплитах, возможно потому, что вы выходите из всех своих сплитс, чтобы оставить vim. Это означает, что конечное состояние - это ваше последнее окно, когда вы закрываете vim, это то, что хранит одержимость. У меня была та же проблема с вкладками, и ответ заключается в следующем: qa для выхода из всех открытых окон, разделений, вкладок. Если у кого-то есть лучший вариант, пожалуйста, сообщите нам.
TC0072
12

В качестве примечания я хотел бы отметить, что я создал еще один плагин dhruvasagar / vim-prosession как расширение tpope / vim-obsession, которое еще больше расширяет возможности создания и управления сеансами vim по умолчанию в централизованном репозитории, так как для каждой конфигурации для каждого каталога и загружает их автоматически при запуске vim без каких-либо аргументов в каталоге. Это также позволяет вам переключаться между различными сессиями для удобства.

Дхрува Сагар
источник
Это звучит потрясающе. Если бы я мог управлять файлами сеансов в папке, похожей на отмену, и файлами резервных копий, чтобы мои проекты не загромождались файлами подкачки, которые могли бы просто поразить меня.
dragon788
1

Вы можете попробовать плагин vim-workspace , его функции управления сессиями автоматизированы, доступны для вашего текущего рабочего каталога и довольно просты (нужно запустить ToggleWorkspaceтолько один раз).

jaybay
источник