2011-12-07 13 views
18

यदि आप iTerm2 एप्लिकेशन से परिचित हैं, तो आप जान लेंगे कि आप विम के समान दृश्य विभाजित कर सकते हैं, और निष्क्रिय दृश्य "dimmed।"विम - मंद निष्क्रिय स्प्लिट पैन

मैं आम तौर पर तीन लंबवत विभाजित दृश्यों के साथ काम करता हूं और पृष्ठभूमि रंग को एक गहरे स्वर में सेट करके निष्क्रिय लोगों को मंद करना अच्छा होगा, उदाहरण के लिए।

क्या ऐसा करने का कोई तरीका है?

उत्तर

17

मैं निम्नलिखित समाधान के साथ आए हैं ('colorcolumn' और unsetting 'cursorline' का प्रयोग करके): मेरे (वर्तमान) dotfiles पर

" 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 

देखें यह: https://github.com/blueyed/dotfiles/blob/master/vimrc#L351

अद्यतन मैं इसमें से एक प्लगइन बनाया है: https://github.com/blueyed/vim-diminactive

+2

कमाल! बहुत अच्छा। –

+1

यह किसी भी मशीन जो संघर्ष कर रहे हैं के लिए अधिक कुशल बनाया जा सकता है। हर बार जब हम खिड़की स्विच करते हैं तो हमें सभी खिड़कियों के लिए दौड़ने की ज़रूरत नहीं है। हमें WinLeave पर किसी भी विंडो पर 'setwinvar' और WinEnter पर' setlocal nocolorcolumn 'करने की आवश्यकता है। (यह माना जाता है कि हमारा सत्र केवल एक खिड़की से शुरू होता है, और हम उनमें से प्रत्येक को दर्ज किए बिना कई खिड़कियां कभी नहीं बनाते हैं।) – joeytwiddle

+0

एयू विनइंटर * सेट शर्ट को हटाएं ताकि उपयोगकर्ता की मूल कर्सरलाइन सेटिंग्स का सम्मान किया जा सके –

1

के रूप में आप अलग अलग विम खिड़कियों के लिए अलग colourschemes की आवश्यकता होगी का वर्णन पृष्ठभूमि रंग बदल रहा है। जहां तक ​​मुझे पता है यह संभव नहीं है, क्योंकि यह एक वैश्विक सेटिंग है (कुछ दिनों पहले this answer देखें)।

किस दृश्य विंडो के लिए दृश्य सहायता के रूप में, मुझे लगता है कि स्थिति रेखा औपचारिक रूप से पर्याप्त है। सक्रिय विंडो (hi StatusLine) और किसी भी असुरक्षित विंडो (hi StatusLineNC) के लिए हाइलाइट समूह अलग हैं। आप या तो उनके बीच एक बहुत ही कठोर constrast के साथ एक colourscheme चुन सकते हैं, या अपने पसंदीदा colourscheme संपादित कर सकते हैं।

+1

एक विपरीत स्थिति रेखा के अलावा, मुझे एक कर्सरलाइन सेट करने में मदद मिलती है जो खड़ा है। – David

+1

हालांकि यह ओपी द्वारा स्वीकार किया गया उत्तर है, यह वास्तव में गलत है। @blueyed द्वारा उत्तर एक स्क्रिप्ट प्रदान करता है, जो मेरे .vimrc में रखा गया है, प्रभावी रूप से निष्क्रिय बफर (विंडोज़) के पृष्ठभूमि रंग को बदलता है। यह एक हैक का थोड़ा सा है, लेकिन यह काम करता है। – monotasker

1

neovim (v0.2.1) में, निम्न कॉन्फ़िगरेशन निष्क्रिय पैन मंद हो जाएगा:

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

बस जोड़ना चाहता था: यदि आप जीयूआई (उदा। एनवीआईएम-क्यूटी) में एनवीआईएम का उपयोग करते हैं, तो 'cittermbg' को' guibg' के साथ बदलें और एक हेक्स रंग को मान के रूप में उपयोग करें, उदा। 'Guibg = # E7E7E7'। – Rotareti