Yalnızca Pencereyi Geri Al


24

Bir pencerede birden fazla bölmeli bir vaka düşünün. vim, tüm pencerenin üzerinden geçmesi için geçerli bölünmeyi hızla "maksimize etmesine" izin verir <C-W> o.

Daha önce var olan bölmeleri "hatırla" ve işten sonra bu duruma geri dönmenin bir yolu var <C-W> omı?

EDIT: Netleştirmek için, herhangi bir üçüncü taraf eklentileri kullanmadan bunu yapmanın bir yolunu arıyorum.


1
Bu cevabı SO ile alakalı buldum , ancak mümkünse bu işlevselliğe eklenti olmadan sahip olmak istiyorum.
Bhargav Bhat

5
Lütfen bir yorumda bulunmak yerine, soruya bununla ilgili gereksinimleri ekleyin.
muru

Başka bir stackexchange sitesinde ise bu soru yinelenmiş sayılıyor mu? stackoverflow.com/q/13194428/1698426
John Schmitt

Yanıtlar:


14

Bunu yapmanın en basit yolu muhtemelen önceki bir düzenleme ortamını geri yükleyebilecek olan vim komut dosyaları (vim sizin için otomatik olarak üretebilir) olan oturum dosyalarıyla.

Kullanarak yeni bir oturum dosyası oluşturabilirsiniz :mksession <filename>. Oluşturulan oturum komut dosyasını çalıştırarak bu oturumu geri yükleyebilirsiniz :source <filename>.

Böylece, mevcut oturumu bir pencereyi büyütmeden önce kaydedebilir ve pencereyi "büyütmek" istediğinizde geri yükleyebilirsiniz.

Bunu kullanarak, bir oturumu önceden kaydetmek için uygun pencereleme komutlarını yeniden düzenleyebilir ve oturumu geri yükleyerek son pencereleme komutunu "geri almak" için yeni bir eşleme ekleyebilirsiniz. Örneğin:

  • nnoremap <C-w>o :mksession! ~/session.vim<CR>:wincmd o<CR>ve bunun gibi, desteklemek istediğiniz tüm pencere komutları için (bkz :help CTRL-W. çok şey var). !Mevcut bir oturum dosyanın üzerine ilgili önler hataları.
  • nnoremap <C-w>u :source ~/session.vim<CR> son pencereleme komutunu "geri almak" için.

Özellikle sağlam olmak istiyorsanız, oturum dosyalarını bir yığına kaydetmek için işlevler yoluyla bunu genişletebilir ve tam bir geri alma zinciri elde etmek için bunları açabilirsiniz, ancak bu noktada büyük olasılıkla izlemek için bir sürü işlev yazmak daha etkilidir. bellekteki pencere komut geçmişi ... hangi noktada muhtemelen bu tür bir şey yapan eklentileri çoğaltıyorsunuzdur.


11

Başka bir seçenek mevcut pencerenizi yeni bir sekmede açmak, daha sonra bitirdiğinizde sekmeyi kapatmak olabilir.

:split(Ya da :spkısa) komutu, bir bağımsız değişken olmadan, mevcut bölme ile aynı tampon maddesi ile yeni bir bölünme açma etkisine sahiptir. :tabKomut onları yerine bir sekme kullanmak değişen birçok pencere ile ilgili komutları çalıştırabilirsiniz. Bunları bir araya getirmek :tab sp, mevcut tamponla yeni bir sekme açacak şekilde verir .

Daha sonra, yeni sekmeyi :qveya ile kapatabilirsiniz :tabclose( :tabckısaca).


2

Bu senaryo için ZoomWin eklentisini ( https://github.com/itspriddle/ZoomWin ) kullanıyorum. Basılması CtrlW- Oikinci kez pencere düzeninizi geri yükler.


1
öneri için teşekkürler, ama sorumu not aldığım gibi, bunun bir eklenti olmadan yapılıp yapılamayacağını bilmek isterim.
Bhargav Bhat,

1
Uzaklaştırma yaparken bu eklenti bir nedenden dolayı benim için yavaştı. Aynı sorunu yaşayan başka biri var mı?
shriek

2

Tanımladığınız şey tam olarak “zum” adıyla geçen özellik gibi. SO ile ilgili çok iyi bir cevap var .

DÜZENLEME: Açık cevap, kopyalanıp yapıştırılan SO . Metin parçacığını aşağıya .vimrc içine koyup çağırdım

:ZoomToggle

benim vim komut isteminde.

" Zoom / Restore window.
function! s:ZoomToggle() abort
    if exists('t:zoomed') && t:zoomed
        execute t:zoom_winrestcmd
        let t:zoomed = 0
    else
        let t:zoom_winrestcmd = winrestcmd()
        resize
        vertical resize
        let t:zoomed = 1
    endif
endfunction
command! ZoomToggle call s:ZoomToggle()
nnoremap <silent> <C-A> :ZoomToggle<CR>

Bu bağlantı soruyu cevaplayabilse de, cevabın temel kısımlarını buraya eklemek ve referans için bağlantıyı sağlamak daha iyidir. Bağlantılı sayfa değişirse, yalnızca bağlantı yanıtları geçersiz olabilir.
muru

Neden aşağı oy?
John Schmitt

Ben değilim. Muhtemelen onu kim bayrakladı.
muru


Katılıyorum. Yapabileceğim en faydalı şey ne olurdu?
John Schmitt

0

Bu gönderi eski, kabul edilen cevap hakkında endişelenmiyor terminal buffer.

Kabul edilen cevap sessionhile yapmak için kullanılır , ancak sessiontamamen geri yükleyemez terminal buffer:

                            *terminal-session*
A terminal window will be restored when using a session file, if possible and
wanted.

If "terminal" was removed from 'sessionoptions' then no terminal windows will
be restored.

If the job in the terminal was finished the window will not be restored.
...

Tommcdo'nun cevabı hala çalışıyor, <c-w>:tab splitiyi çalışıyor terminal buffer. Bir haritayı hak ediyor:

nnoremap <c-w><space> :tab split<cr>
tnoremap <c-w><space> <c-w>:tab split<cr>
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.