VIM-буфер / скрытие окон - PullRequest
       1

VIM-буфер / скрытие окон

2 голосов
/ 04 января 2011

Я пишу плагин vim, который должен сделать специальное управление окнами. То, что я хочу, заключается в следующем:

При запуске текущее окно будет разделено на две части, а вновь созданное окно будет использоваться для ввода данных пользователем и вывода плагинов. Давайте назовем это окном ввода / вывода.

Иногда окно ввода / вывода необходимо «заменить». То есть новый набор содержимого заменит часть экрана, содержащую окно ввода / вывода. Назовите это временным окном. Тем не менее, окно ввода / вывода останется где-то сохраненным. Когда пользователь покидает это временное окно (с помощью: q или: q!), Содержимое окна ввода-вывода снова появится в исходном месте.

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

То, что я думаю, должно работать:

  1. : новое для разделения экрана при запуске.
  2. : set bufhidden = скрыть в окне ввода / вывода.
  3. : обновить отображение временного окна.

Это работает до тех пор, пока пользователь не сделает: q из временного окна. Вместо разделения экрана верхняя часть полностью исчезает. Попытка выйти с этого момента приводит к ошибкам в отношении несохраненных данных.

Заранее спасибо.

1 Ответ

1 голос
/ 05 января 2011

Чтобы не отображать ошибки о несохраненных данных (и не устанавливать измененный флаг), используйте setlocal buftype=nowrite. Чтобы реально что-то сохранить, когда vim уходит или буфер закрыт, попробуйте

new
setlocal buftype=nowrite " or even buftype=nofile, if it is possible
let s:iobufnr=bufnr('%')
augroup FooSaveIO
    autocmd!
    execute "autocmd BufUnload <buffer=".s:iobufnr."> call s:SaveIO()"
augroup END

где call s:SaveIO() должен быть заменен командой, которая сохраняет этот IO. О выходе из буфера без удаления окна: попробуйте плагин bufkill и его команду :BD. Другой способ - захватить событие BufWipeout для временного окна и открыть третье окно, поместив здесь буфер ввода-вывода (чтобы при закрытии временного буфера и связанного окна окно ввода-вывода отображалось на их месте), но существует слишком много способов его сломать.

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