On 27/04/12 23:41, rameo wrote:
On Friday, April 27, 2012 8:29:03 PM UTC+2, Tony Mechelynck wrote:
On 27/04/12 18:34, rameo wrote:
On Friday, April 27, 2012 6:18:29 PM UTC+2, Ben Fritz wrote:
On Friday, April 27, 2012 10:56:55 AM UTC-5, rameo wrote:
I use this code in my .vimrc to use my dark colorscheme when I open a .vim page 
and my light colorscheme when I open whatever other page:

augroup filetype_colorscheme
          au BufEnter *
          \ if !exists('b:colors_name')
              \ | if &ft == "vim"
                  \ | let b:colors_name = 'color_dark'
              \ | else
                  \ | let b:colors_name = 'color_light'
              \ | endif
          \ | endif
          \ | exe 'colorscheme' b:colors_name
augroup END

However, it doesn't work fine in split windows.
When I click on a .vim file in the split window all not .vim files changes to 
the dark colorscheme as well.
I would like to keep them their own colorscheme; a .vim page always the dark 
colorscheme and whatever other file always the light colorscheme.

I've learned that colorschemes will always affect the entire vim instance and 
that it is not possible to have a different color scheme per split window.

In that point I would like to disable above code for split windows in order to give all 
split windows the default colorscheme (which I can change afterwards using :color 
"colorscheme") but don't know how to realize this. Whatever I tried didn't do 
what I want it to do.
Can anyone help me?

You can check the number of windows with winnr('$'). If > 1, you have multiple 
split windows.

Hi Ben,

That's what I tried.
But wherever I put it in above code it doesn't work.
Where would you place this in above code?


Around your autocommand:

augroup filetype_colorscheme
      au BufEnter *
          \ if winnr('$') == 1
              \ | if !exists('b:colors_name')
                  \ | if &ft == "vim"
                      \ | let b:colors_name = 'color_dark'
                  \ | else
                      \ | let b:colors_name = 'color_light'
                  \ | endif
              \ | endif
              \ | exe 'colorscheme' b:colors_name
          \ | else
              \ | colorscheme default
          | | endif
augroup END

or (maybe more readable)

function SetColors()
        if exists('b:colors_name')
                exe 'colorscheme' b:colors_name
                return
        endif
        if winnr('$') > 1
                colorscheme default
        elseif &ft == 'vim'
                colorscheme color_dark
        else
                colorscheme color_light
        endif
        let b:colors_name = g:colors_name
endfunction
augroup filetype_colorscheme
        au BufEnter * call SetColors()
augroup END

This way, the autocommand will be defined unconditionally, but if it
finds that at BufEnter three are more than one window in the current tab
it will go back to the default scheme.


Best regards,
Tony.
--
Actor:  So what do you do for a living?
Doris:  I work for a company that makes deceptively shallow serving
        dishes for Chinese restaurants.
                -- Woody Allen, "Without Feathers"

Thank you very much.

Just one little thing..

What I noted is that when I have a split window it gives the default colorscheme (that's 
ok) but I would like to have the possibility to change the colorscheme of all split 
buffers in a window with the :color "colorscheme" command (and if possible keep 
this colorscheme when I switch from one Tab to another and back to the split window or 
when I click in another split buffer in the split window.
(when I have multiple .vim files in the split window I prefer the dark colorscheme, when 
I have multiple .txt files in the split, I prefer the light colorscheme. That isn't 
possible now. When I use :color "colorscheme" and click in another split window 
all other split windows changes again to the default colorscheme)

Is it possible to do?


Well, it is possible, with a slight refinement to the above. You may want to remember the Vim terminology:

- buffer: one file (or file-like data) in Vim memory, with the relevant metadata. It may be displayed in zero or more windows. - window: a viewport into a buffer. If several windows display the same buffer, changes made in one are reflected in all others. Also, if several windows display the same buffer, the displayed regions of that buffer may or may not overlap. - tab page: a set of one or more windows which are displayed at the same time.

"another split buffer in a split window" has no meaning. Maybe you meant "another window in the current tab"?

You can use variables with different scopes:

b:something     local to a buffer
g:something     global to all Vim
l:something     local to a function
s:something     local to a script
t:something     local to a tab page
v:something     predefined at compile-time
w:something     local to a window

With no prefix it falls back to v: for compatibility for a few predefined names, otherwise l: if inside a function, otherwise g:

See also the help for the following functions:

bufname()
bufnr()
bufwinnr()
tabpagebuflist()
tabpagenr()
tabpagewinnr()
winbufnr()
winnr()

See also |setting-tabline| for an example of how to use these functions (albeit for a different purpose).


Best regards,
Tony.
--
Ten million Linux users can't be wrong!

--
You received this message from the "vim_use" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

Reply via email to