Отмена разделенного окна в Vim

231

Я разделил мои окна по горизонтали. Теперь, как я могу вернуться в нормальный режим, то есть без разделения окна только на одно окно, не отменяя все мои открытые окна. У меня 5 и я не хочу "выходить", просто хочу выйти из разделенного окна.

Sudeep
источник
7
Есть ли шанс, что вы сможете принять ответ Эккса? Это гораздо полезнее, чем принятый в настоящее время ...
Кайл Стрэнд,

Ответы:

288

Нажмите Control+ w, затем нажмите, qчтобы закрыть каждое окно за раз.

Обновление : также рассмотрите ответ eckes, который может быть более полезным для вас, включая :on (читайте ниже), если вы не хотите делать это по одному окну за раз.

Уоррен П
источник
9
Я согласен, но ОП не выбрал ответ, и я не могу изменить его сам.
Уоррен П
4
Я уверен, что это правильный ответ. Это сделало это для меня, и если вы посмотрите на вопрос опа, он не хотел закрывать свои другие открытые окна, только недавно разделенное.
Зак
1
Не помогает, если показанный буфер содержит несохраненные изменения. Это говорит, что я должен изменить с! но я не знаю как. Как новичок я потерян сейчас.
MusiKk
2
так что сохрани это. Вам не нужен этот ответ, если вы не знаете, как сохранить. Возможно, у вас даже нет РАЗРЕШЕНИЯ на сохранение.
Уоррен П
1
Исходя из традиционных графических редакторов, это довольно странная концепция. Настройка, hiddenкажется, помогает. Хотя, что я имел в виду, как вы добавляете! к ярлыку? Это "Cw! Q", "Cw q!", "! Cw q", "C-! W q"? Я думаю, что ничего из этого, но я уже забыл, как создавать новые буферы, так что это упражнение для читателя.
MusiKk
265

Чтобы закрыть все расколы, я обычно поместить курсор в окне , которое должно стать на -ly видимого , а затем сделать :onчто делает текущее окно в на -ly видимого окна. Хорошая мнемоника для запоминания.


Изменить: :help :on показал мне, что эти команды одинаковы:

  • :on
  • :only
  • CTRL-w CTRL-o
  • И да, тоже CTRL-W oимеет такой же эффект (как ответил Натан ).

Каждое из этих четырех закрывает все окна, кроме активного.

Экес
источник
8
+1 Если другое окно содержит какие-либо непреднамеренные изменения, :onответит E445: Other window contains changesи не закроет другое окно. Например, я обычно создаю новое окно и читаю в него файл, из которого я хотел бы вырвать. В этом случае Vim считает, что в другом окне есть неписанные изменения. В таком случае используйте :on!для принудительного закрытия.
Сабунку
61

чтобы закрыть все окна, кроме текущего, используйте:

CTRL+ w,o

То есть сначала CTRL+ wа потом o.

Натан Феллман
источник
3
Мне также интересно, есть ли способ отменить CTRL+W oнапечатанный случайно.
Паоло
30

Существует два варианта закрытия текущего окна: ZZи ZQ, соответственно, сохранить, а не сохранить изменения в отображаемом буфере.

Benoit
источник
10
Это, безусловно, "vim way", crtl + wo кажется таким emacs.
Энди Хейден
Мне не нравится, Zпотому что я немец. (Спойлер: раскладка клавиатуры, если вы часто переключаетесь между настройками DE / EN)
Tino
6

Команда: скрыть скрытое в данный момент окно. Я думаю, что это та функциональность, которую вы ищете.

Чтобы перемещаться между окнами, нажмите Ctrl + w, а затем клавишу навигации (h, j, k, l или клавиши со стрелками).

Для получения дополнительной информации запустите :help windowи :help hideв VIM.

cledoux
источник
Это круто. Chrome (с плагином ssh) перехватывает <CW> как «закрывающую вкладку», эффективно отключая все команды окна vim <cw>. Наличие альтернативы полезно.
узда
6

С :help opening-window(поиск "Закрытие окна" - /Closing a window)

  • :q[uit]закройте текущее окно и буфер. Если это последнее окно, оно также выйдет из vim
  • :bd[elete] выгрузить текущий буфер и закрыть текущее окно
  • :qa[all]или :quita[ll]закроет все буферы и окна и выйдет из vim ( :qa!принудительно, без сохранения изменений)
  • :clo[se]закройте текущее окно, но оставьте буфер открытым. Если есть только одно окно, эта команда не выполняется
  • :hid[e]скрыть буфер в текущем окне (подробнее на :help hidden)
  • :on[ly] закройте все остальные окна, но оставьте все буферы открытыми
chaptuck
источник
5

Я обнаружил, что ctrl+ wк окну, которое вы хотите закрыть, тогда просто сделайте :q. Это работает для меня.

dmarges
источник
Это действительно повторяющийся ответ, дубликат чего-то, что сидело там более 3 лет.
Уоррен П
@WarrenP не похож на дупла. Я не нашел никакого другого ответа, который упоминал бы ^W^W:qкак возможное решение, поэтому избавьтесь от раскола. Обратите внимание, что, ^W to the window you want to closeочевидно, подразумевается многократное использование ^W^Wпереключателя в окне, которое вы хотите закрыть ..
Тино,
Виноват. Другой - ^ W, тогда o
Уоррен П
2

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

ниже выдержка из моего .vimrc

" disable macro, since not used in 90+% use cases
map q <Nop>
" q,  close/hide current window, or quit vim if no other window
nnoremap q :if winnr('$') > 1 \|hide\|else\|silent! exec 'q'\|endif<CR>
" qo, close all other window    -- 'o' stands for 'only'
nnoremap qo :only<CR>
set hidden
set timeout
set timeoutlen=200   " let vim wait less for your typing!

Что очень хорошо подходит для моего рабочего процесса

Если qбыл нажат

  • скрыть текущее окно, если открыто несколько окон, иначе попытайтесь выйти из vim.

если qoбыл нажат,

  • закройте все остальные окна, без эффекта, если только одно окно.

Конечно, вы можете обернуть эту грязную часть в функцию , например,

func! Hide_cur_window_or_quit_vim()
    if winnr('$') > 1
        hide
    else
        silent! exec 'q'
    endif
endfunc
nnoremap q :call Hide_cur_window_or_quit_vim()<CR>

Sidenote : Я переназначить q, так как я не использую макрос для редактирования, вместо того, чтобы использовать :s, :g, :vи внешние команды обработки текста , если это необходимо, например, :'{,'}!awk 'some_programm'или использование :norm! normal-command-here.

qeatzy
источник
1

Точно так же, как другие сказали, прежде чем сделать это, нажмите ctrl+, wа затем o. Это «максимизирует» текущее окно, закрывая остальные. Если вы хотите «развернуть» его, для этого есть плагин ZoomWin . В противном случае вам придется воссоздать настройки окна с нуля.

Psyho
источник
0

Хорошо, я просто отсоединился и снова подключился к сеансу экрана, и я вернулся к нормальному экрану, который хотел

Sudeep
источник
Это не оставляет vimрежим разделенного окна, это просто оставляет screenрежим разделенного окна - который может быть легко ошибочным, так что, возможно, другие тоже. Кстати, я нахожу эту функцию экрана раздражающей, следовательно, теперь я по умолчанию tmuxразрешаю повторное присоединение со всеми разбиениями без изменений.
Тино