tags:

views:

421

answers:

3

Hi

I have a small problem with "tab size" and different project, some like 2 or 4 and the Linux kernel like 8 spaces per tab.

And this is not a big problem since I can just change a couple of settings in my .vimrc

set tabstop=4
set shiftwidth=4
set softtabstop=4

But that is 3 lines I need to change...

It would be nice to have one line with a variable with the number 2,4 or 8.

A little bit like

let l:tabsize=4
set tabstop=l:tabsize
set shiftwidth=l:tabsize
set softtabstop=l:tabsize

But this don't work...

Do you know how to fix this?

Thanks Johan


Update: This solves my little problem.

let tabsize = 4
execute "set tabstop=".tabsize
execute "set shiftwidth=".tabsize
execute "set softtabstop=".tabsize
+3  A: 

This is working:

let my_sw = 20
let &sw = my_sw

Now you can figure how to fix your code

dimba
This is correct.
Lucas Oman
+2  A: 

you can't use variables on the rhs in the .vimrc.

try :help feature-list for more info. for unix vs windows for example (not sure what your projects are):

if has("unix") " do stuff for Unix elseif has("win32") " do stuff for Windows endif

might work, or other examples are

let &path = g:desktop_path

or

execute "set path=".g:desktop_path

If g:desktop_path contains spaces, you will have to escape those, either in the original setting of g:desktop_path or when setting 'path', e.g.,

execute "set path=".escape(g:desktop_path, ' ')

See

:help let-option :help execute :help escape()

Mark Lewis
Accepted Solution since you provided a "execute" syntax example... it was the missing part.
Johan
+1  A: 

This solution doesn't use local variables, but it will get you the result you want using just your .vimrc file. Just add the code below to your .vimrc file and add more project-specific options (even mappings) to the corresponding functions below. (Remember to change the globbing paths in the autocmd! lines to the appropriate folder name.)

autocmd! BufReadPost,BufNewFile */myProject/** call <SID>MyProjectOptions()
autocmd! BufReadPost,BufNewFile */linux-kernel/** call <SID>LinuxKernelOptions()

function! <SID>MyProjectOptions()
    " everything in this function only applies to myProject files
    setlocal tabstop=4
    ...
endfunction

function! <SID>LinuxKernelOptions()
    " everything in this function only applies to linux kernel files
    setlocal tabstop=8
    ...
endfunction
too much php
Cool this could work :)
Johan