2011-12-07 24 views
18

Nếu bạn đã quen với ứng dụng iTerm2, bạn sẽ biết rằng bạn có thể tách các chế độ xem tương tự như vim và các chế độ xem không hoạt động bị "làm mờ".vim - các khung phân tách không hoạt động

Tôi thường làm việc trong vim với ba chế độ xem chia dọc và sẽ tốt hơn nếu làm mờ các màu không hoạt động bằng cách đặt màu nền thành tông màu tối hơn, ví dụ.

Có cách nào để thực hiện việc này không?

Trả lời

17

tôi đã đưa ra các giải pháp sau đây (sử dụng 'colorcolumn' và unset 'cursorline'):

" Dim inactive windows using 'colorcolumn' setting 
" This tends to slow down redrawing, but is very useful. 
" Based on https://groups.google.com/d/msg/vim_use/IJU-Vk-QLJE/xz4hjPjCRBUJ 
" XXX: this will only work with lines containing text (i.e. not '~') 
function! s:DimInactiveWindows() 
    for i in range(1, tabpagewinnr(tabpagenr(), '$')) 
    let l:range = "" 
    if i != winnr() 
     if &wrap 
     " HACK: when wrapping lines is enabled, we use the maximum number 
     " of columns getting highlighted. This might get calculated by 
     " looking for the longest visible line and using a multiple of 
     " winwidth(). 
     let l:width=256 " max 
     else 
     let l:width=winwidth(i) 
     endif 
     let l:range = join(range(1, l:width), ',') 
    endif 
    call setwinvar(i, '&colorcolumn', l:range) 
    endfor 
endfunction 
augroup DimInactiveWindows 
    au! 
    au WinEnter * call s:DimInactiveWindows() 
    au WinEnter * set cursorline 
    au WinLeave * set nocursorline 
augroup END 

Xem nó ở tôi dotfiles (hiện tại): https://github.com/blueyed/dotfiles/blob/master/vimrc#L351

Cập nhật tôi đã tạo một plugin trong số đó: https://github.com/blueyed/vim-diminactive

+2

tuyệt vời! rất đẹp. –

+1

Điều này có thể được thực hiện hiệu quả hơn cho bất kỳ máy móc nào đang gặp khó khăn. Chúng tôi không thực sự cần phải chạy cho tất cả các cửa sổ mỗi lần chúng tôi chuyển đổi cửa sổ. Chúng ta chỉ cần thực hiện 'setwinvar' trên bất kỳ cửa sổ nào chúng ta WinLeave, và' setlocal nocolorcolumn' trên WinEnter. (Đó là giả định phiên của chúng tôi bắt đầu chỉ với một cửa sổ, và chúng tôi không bao giờ tạo nhiều cửa sổ mà không cần nhập từng cửa sổ.) – joeytwiddle

+0

Xóa phân vùng au WinEnter * để cài đặt con trỏ ban đầu của người dùng được tôn trọng –

1

Thay đổi màu nền như bạn mô tả sẽ đòi hỏi colourschemes khác nhau cho các cửa sổ Vim khác nhau. Theo tôi biết điều này là không thể, vì nó là một thiết lập toàn cầu (xem this answer từ một vài ngày trước).

Là một trợ giúp trực quan mà cửa sổ đang hoạt động, tôi thấy trạng thái là đủ thông thường. Các nhóm nổi bật khác nhau đối với cửa sổ hiện hoạt (hi StatusLine) và bất kỳ cửa sổ không hoạt động nào (hi StatusLineNC). Bạn có thể chọn một colourscheme với một constrast rất stark giữa chúng, hoặc chỉnh sửa colourscheme yêu thích của bạn.

+1

Ngoài Dòng thời gian tương phản, tôi thấy hữu ích khi đặt CursorLine nổi bật. – David

+1

Mặc dù đây là câu trả lời được OP chấp nhận, nhưng nó thực sự không chính xác. Câu trả lời của @blueyed cung cấp một tập lệnh được đặt trong .vimrc của tôi, thực sự thay đổi màu nền của các bộ đệm không hoạt động (cửa sổ). Đó là một chút của một hack, nhưng nó hoạt động. – monotasker

1

Trong neovim (v0.2.1), cấu hình sau sẽ làm mờ các khung không hoạt động:

hi ActiveWindow ctermbg=16 | hi InactiveWindow ctermbg=233 
set winhighlight=Normal:ActiveWindow,NormalNC:InactiveWindow 
+0

Chỉ muốn thêm: Nếu bạn sử dụng nvim trong GUI (ví dụ: nvim-qt), thay thế 'ctermbg' bằng' guibg' và sử dụng màu hex làm giá trị, ví dụ: 'guibg = # E7E7E7'. – Rotareti

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