Рассмотрим случай с несколькими разбиениями в окне. vim позволяет быстро «максимизировать» текущее разделение, чтобы охватить все окно <C-W>
o
.
Есть ли способ заставить vim «запомнить» расщепления, которые существовали до, и вернуться в это состояние после выполнения <C-W>
o
?
РЕДАКТИРОВАТЬ: Чтобы уточнить, я ищу способ сделать это без использования каких-либо сторонних плагинов.
Ответы:
Самый простой способ сделать это, вероятно, с помощью файлов сеансов, которые представляют собой сценарии vim (которые vim может автоматически создать для вас), которые восстановят предыдущую среду редактирования.
Вы можете создать новый файл сессии, используя
:mksession <filename>
. Вы можете восстановить этот сеанс, выполнив сгенерированный скрипт сеанса:source <filename>
.Таким образом, вы можете сохранить текущий сеанс до максимизации окна и восстановить его, когда вы хотите «развернуть» окно.
Используя это, вы можете переназначить соответствующие команды управления окнами, чтобы заранее сохранить сеанс, и добавить новое сопоставление для одного, чтобы «отменить» последнюю команду управления окнами, восстановив сеанс. Например:
nnoremap <C-w>o :mksession! ~/session.vim<CR>:wincmd o<CR>
и так далее для всех оконных команд, которые вы хотите поддерживать (видите:help CTRL-W
, их много). В!
позволяет предотвратить ошибки , связанные с перезаписью существующего файла сеанса.nnoremap <C-w>u :source ~/session.vim<CR>
"отменить" последнюю команду управления окнами.Если вы хотите быть особенно надежным, вы можете расширить это с помощью функций, чтобы сохранить файлы сессий в стеке и извлечь их, чтобы получить полную цепочку отмены, хотя в этот момент, вероятно, более эффективно написать набор функций для отслеживания история команд окна в памяти ... в этот момент вы, вероятно, дублируете плагины, которые уже делают подобные вещи.
источник
Другой вариант - открыть текущее окно на новой вкладке, а затем просто закрыть вкладку, когда закончите.
Команда
:split
(или:sp
для краткости) без аргумента приводит к открытию нового разделения с тем же буфером, что и текущее разделение. Команда:tab
может запускать многие связанные с окном команды, изменяя их, чтобы вместо них использовать вкладку. Объединение их вместе дает:tab sp
, что откроет новую вкладку с текущим буфером.После этого вы можете закрыть новую вкладку с помощью
:q
или:tabclose
(:tabc
для краткости).источник
Я использую плагин ZoomWin ( https://github.com/itspriddle/ZoomWin ) именно для этого сценария. Нажатие CtrlW- Oво второй раз восстанавливает ваш макет окна.
источник
То, что вы описываете, звучит так же, как функция, которая называется «масштабирование». На SO уже есть отличный ответ, который делает это очень хорошо.
РЕДАКТИРОВАТЬ: Явный ответ, скопированы и вставлены из SO . Я помещаю фрагмент ниже в мой .vimrc и затем вызываю
в моей командной строке vim.
источник
Этот пост старый, принятый ответ не касается
terminal buffer
.Принятый ответ используется,
session
чтобы сделать трюк, ноsession
не может полностью восстановитьterminal buffer
:Tommcdo в ответ по- прежнему работает,
<c-w>:tab split
хорошо работаетterminal buffer
. Это заслуживает карты:источник