[Python-Dev] PEP 7 updated

Brett Cannon brett at python.org
Thu May 13 20:39:23 CEST 2010


Feel free to look at Misc/Vim/python.vim and see if this works better
than what is already there.

On Wed, May 12, 2010 at 20:47, Trent Nelson <trent at snakebite.org> wrote:
>
>> Does anyone know of a way to teach vim that C sources in a python checkout
>> should have 4-space indents without changing the defaults for other C files?
>
> I use this in my vimrc:
>
> "----------------------------------------------------------------------------"
> " indentation: use detectindent plugin if possible
> "----------------------------------------------------------------------------"
> set autoindent
> set smartindent
> try
>    let g:detectindent_preferred_expandtab = 1
>    let g:detectindent_preferred_tabsize = 8
>    let g:detectindent_preferred_indent = 4
>
>    source $VIMRUNTIME/plugin/detectindent.vim
>    au BufNewFile,BufRead * .* DetectIndent
> catch
>    set smarttab
>    set expandtab
>    set tabstop=8
>    set shiftwidth=4
>    set softtabstop=4
>    set textwidth=80
> endtry
>
> *** And this is plugin/detectindent.vim:
>
> " Name:          detectindent (global plugin)
> " Version:       1.0
> " Author:        Ciaran McCreesh <ciaranm at gentoo.org>
> " Updates:       http://dev.gentoo.org/~ciaranm/vim/
> " Purpose:       Detect file indent settings
> "
> " License:       You may redistribute this plugin under the same terms as
> Vim
> "                itself.
> "
> " Usage:         :DetectIndent
> "
> "                " to prefer expandtab to noexpandtab when detection is
> "                " impossible:
> "                :let g:detectindent_preferred_expandtab = 1
> "
> "                " to set a preferred indent level when detection is
> "                " impossible:
> "                :let g:detectindent_preferred_indent = 4
> "
> " Requirements:  Untested on Vim versions below 6.2
>
> fun! <SID>IsCommentStart(line)
>    " &comments isn't reliable
>    if &ft == "c" || &ft == "cpp"
>        return -1 != match(a:line, '/\*')
>    else
>        return 0
>    endif
> endfun
>
> fun! <SID>IsCommentEnd(line)
>    if &ft == "c" || &ft == "cpp"
>        return -1 != match(a:line, '\*/')
>    else
>        return 0
>    endif
> endfun
>
> fun! <SID>DetectIndent()
>    let l:has_leading_tabs            = 0
>    let l:has_leading_spaces          = 0
>    let l:shortest_leading_spaces_run = 0
>    let l:longest_leading_spaces_run  = 0
>
>    let l:idx_end = line("$")
>    let l:idx = 1
>    while l:idx <= l:idx_end
>        let l:line = getline(l:idx)
>
>        " try to skip over comment blocks, they can give really screwy indent
>        " settings in c/c++ files especially
>        if <SID>IsCommentStart(l:line)
>            while l:idx <= l:idx_end && ! <SID>IsCommentEnd(l:line)
>                let l:line = getline(l:idx)
>                let l:idx = l:idx + 1
>            endwhile
>            let l:idx = l:idx + 1
>            continue
>        endif
>
>        let l:leading_char = strpart(l:line, 0, 1)
>
>        if l:leading_char == "\t"
>            let l:has_leading_tabs = 1
>
>        elseif l:leading_char == " "
>            " only interested if we don't have a run of spaces followed by a
>            " tab.
>            if -1 == match(l:line, '^ \+\t')
>                let l:has_leading_spaces = 1
>                let l:spaces = strlen(matchstr(l:line, '^ \+'))
>                if l:shortest_leading_spaces_run == 0 ||
>                            \ l:spaces < l:shortest_leading_spaces_run
>                    let l:shortest_leading_spaces_run = l:spaces
>                endif
>                if l:spaces > l:longest_leading_spaces_run
>                    let l:longest_leading_spaces_run = l:spaces
>                endif
>            endif
>
>        endif
>
>        let l:idx = l:idx + 1
>    endwhile
>
>    if l:has_leading_tabs && ! l:has_leading_spaces
>        " tabs only, no spaces
>        set noexpandtab
>        if exists("g:detectindent_preferred_tabsize")
>            let &shiftwidth  = g:detectindent_preferred_indent
>            let &tabstop     = g:detectindent_preferred_indent
>        endif
>
>    elseif l:has_leading_spaces && ! l:has_leading_tabs
>        " spaces only, no tabs
>        set expandtab
>        let &shiftwidth  = l:shortest_leading_spaces_run
>
>    elseif l:has_leading_spaces && l:has_leading_tabs
>        " spaces and tabs
>        set noexpandtab
>        let &shiftwidth = l:shortest_leading_spaces_run
>
>        " mmmm, time to guess how big tabs are
>        if l:longest_leading_spaces_run < 2
>            let &tabstop = 2
>        elseif l:longest_leading_spaces_run < 4
>            let &tabstop = 4
>        else
>            let &tabstop = 8
>        endif
>
>    else
>        " no spaces, no tabs
>        if exists("g:detectindent_preferred_tabsize")
>            let &shiftwidth  = g:detectindent_preferred_indent
>            let &tabstop     = g:detectindent_preferred_indent
>        endif
>        if exists("g:detectindent_preferred_expandtab")
>            set expandtab
>        endif
>
>    endif
> endfun
>
> command! -nargs=0 DetectIndent call <SID>DetectIndent()
>
> _______________________________________________
> Python-Dev mailing list
> Python-Dev at python.org
> http://mail.python.org/mailman/listinfo/python-dev
> Unsubscribe:
> http://mail.python.org/mailman/options/python-dev/brett%40python.org
>


More information about the Python-Dev mailing list