2013-06-06 37 views
5

Có một số autocmd khi cửa sổ xem trước được mở/đóng không?Ngăn cửa sổ xem trước Vim di chuyển chính

Tôi muốn cuộn cửa sổ chính n dòng lên khi cửa sổ xem trước được mở, sau đó n dòng xuống khi đóng, để chống lại hiệu ứng "di chuyển văn bản" xảy ra nguyên bản.

Tôi có thể thực hiện việc này với autocmd có liên quan hay không và có cách nào tốt hơn để tôi đạt được điều này không?

Trả lời

1

Không có autocmd event. Nhưng bạn có thể sử dụng WinEnterBufDelete được liên kết với tùy chọn previewwindow để đạt được điều gì đó tương tự.

Sử dụng WinEnter bạn có thể kiểm tra previewwindow; nếu bạn đang ở trên cửa sổ xem trước, bạn có thể đặt biến bộ đệm để khác biệt sự kiện này từ các sự kiện tiếp theo có thể được tạo bằng cách di chuyển đến cửa sổ khác và quay lại cửa sổ xem trước. Bạn cũng có thể đặt au BufDelete <buffer> call MyRestoreMainWindow() để gọi chức năng của mình khi cửa sổ xem trước bị đóng.

0

Tôi thấy câu hỏi này được hỏi thường xuyên và luôn gãi đầu tự hỏi những người chuyển cửa sổ nói về điều gì mà tôi không gặp phải.

Vâng, hôm nay nó xảy ra với tôi rằng hai lựa chọn mà tôi đã thêm vào tôi ~/.vimrc một thời gian dài trước đây có tác dụng phụ thú vị của việc ngăn ngừa mà sợ hãi cửa sổ chuyển:

set splitbelow 
set splitright 

Give it a try !

+0

Tôi đã những thiết lập như là tốt, tôi đang nói về phong trào xảy ra khi thanh tabbar gốc một cái: ': ps/something /', sau đó ': pclose'. –

+0

Bạn nói đúng. Tuy nhiên, chuyển động đó chỉ xảy ra khi con trỏ ở dưới giữa cửa sổ. Có lẽ một cái gì đó như 'nnoremap ps zt: ps'? – romainl

+0

Tôi muốn ngăn chặn chuyển động mỗi khi cửa sổ mở ra, tôi thực sự không bao giờ sử dụng ': ps', nó chỉ là một ví dụ cho thấy vấn đề. –

0

Tôi đã thực sự tự hỏi điều tương tự ngoại trừ thanh tab - cách ngăn chặn sự thay đổi phiền toái đó xảy ra khi thanh tab được hiển thị hoặc ẩn. Bạn đã xem xét một hàm bao hàm? Sau đây dường như làm việc cho các ví dụ ps (nó vẫn sẽ gây ra một sự thay đổi nếu cửa sổ xem trước sẽ che khuất con trỏ)

se splitbelow splitright 
fun! PsWrapper(text) 
    let view=winsaveview() 
    exe 'ps' a:text 
    call winrestview(view) 
endfun 

Trong khi chúng tôi đang ở đây ... các trường hợp thanh tab dường như đòi hỏi một số ma thuật đen . Tức là, như ai đó đã chỉ ra, thanh tab sẽ làm cho văn bản cuộn xuống nếu con trỏ ở trên dòng giữa (??). Nhưng điều này dường như làm việc - để luôn luôn hiển thị một thanh tab:

let [view,g:stal]=[winsaveview(),&stal] 
let [view.topline,&stal]=[view.topline+!g:stal,2] 
call winrestview(view) 

và để khôi phục lại các thiết lập

let [view.topline,&stal]=[view.topline-!g:stal,g:stal] 
call winrestview(view) 
+0

Bạn phải rời khỏi thanh tab luôn hiển thị. Không đau để luôn có thể xem những gì bạn đang ở trong tập tin từ đầu ... –

Các vấn đề liên quan