5

コーディングしていて、さまざまな分割ペインが開いていると想像してください。あるバッファ/ペインから別のバッファ/ペインに切り替えるときに背景色を変更するには、vimrc にどの設定を渡す必要がありますか?

私が試してみました:

autocmd BufEnter * highlight Normal ctermbg=black                                                                                                                                                                                                                              
autocmd BufLeave * highlight Normal ctermbg=white 

256色が有効になっていると確信していることを付け加えたいと思います

4

5 に答える 5

13

実は、この効果を得る方法があります。この関連する質問に対する @blueyed の回答を参照してください: vim - dim inactive split panes 。彼は以下のスクリプトを提供し、私の .vimrc に配置すると、非アクティブなウィンドウの背景が薄暗くなります。実際には、背景は colorcolumn に指定された色と同じ色になります (垂直線は希望のテキスト幅を示します)。

" 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 '~')
" from 
if exists('+colorcolumn')
  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
endif
于 2013-10-25T16:12:04.443 に答える
4

できません。:highlightグループはグローバルです。つまり、複数の window がある場合、すべてのウィンドウの背景は同じハイライト グループ:splitによって色付けされます。Normal

アクティブなウィンドウと非アクティブなウィンドウの唯一の違いは、(点滅する) カーソルと、強調表示されるステータス行(StatusLineStatusLineNC) だけです。'cursorline'(たとえば、現在のバッファでオンにするだけで、他の違いを追加できます(私のCursorLineCurrentWindow プラグインを参照してください。))

Vim の設計目標の 1 つは、GUI GVIM の場合と同様に、原始的なローカラー コンソールでも同様に機能することです。使用できる色が 16 色しかない場合、背景色による区別は構文の強調表示と衝突する可能性があります。それが、Vim がこの機能を持っていない、そして今後も持たない理由だと思います。

于 2013-03-08T07:24:14.587 に答える
1

個人的には、ステータスラインを使用してこれを知らせます。私は、WinEnter と WinLeave の autocmd を使用して、退出時に非アクティブなステータス ライン (グレー表示) に切り替え、入場時にアクティブなステータス ライン (明るい色) に切り替えます。あなたが言及した分割ペインはvimのウィンドウです。これ:help statuslineは、その設定がウィンドウに対してグローバルまたはローカルであることを示しているため、現在のウィンドウにのみ適用する:setlocal statusline=...か、適用することもできます。let &l:statusline=...

a) BufEnter と BufLeave は必ずしも必要なイベントではなく、b) ハイライト グループはグローバルであるため、Normal の定義を変更するとすべてのウィンドウで変更されるため、この方法は機能しません。

于 2013-03-08T03:18:57.333 に答える