原 文: http://www.vim.org/tips/tip.php?tip_id=1231 翻 译: huangyi yi.codeplayer@gmail.com 修 订: 更新日期: 2006-05-18 VimTip 1231: 给python文件设置缩进参数 ----------------------------------------- " Tip: 给python文件设置缩进参数 " Version: 0.1 " Date: 13 May 2006 " " 描述:大多数python脚本的缩进使用4个空格,但是有的时候你需要编辑一个 " 使用了tab 的脚本;在这种情况下要是能够自动检测是否使用了空格 " 或tab,并相应得设置一些参数(或调用一些函数)就很有用了。 " " 用法:你可以把这个脚本放到你的 vimrc 中并用一个关联到python文件的 autocmd " 来调用 PyIndentAutoCfg 函数,或者手动调用,或者把它放到 python.vim " 语法文件中,或者... :-) " 此函数给python脚本设置参数,让它使用空格进行缩进。这也是默认的。YMMV。 function PySpacesCfg() set expandtab " 使用空格代码tab。 set tabstop=8 " 代替一个 tab 的空格数量。 set softtabstop=4 " 编辑操作中代码一个 tab 的空格数量。 set shiftwidth=4 " 缩进时使用的空格数量 (>>, <<, ...) endfunction " 此函数给python脚本设置参数,让它使用 tab 进行缩进。YMMV。 function PyTabsCfg() set noexpandtab set tabstop=4 set softtabstop=4 set shiftwidth=4 endfunction " 如果文件看起来象个使用tab进行缩进的python脚本的话 返回1。否则0。 function PyIsTabIndent() let lnum = 1 let max_lines = 100 " 最大检查行数。 let got_tabs = 0 let got_cols = 0 " 1 if the previous lines ended with columns. while lnum <= max_lines let line = getline(lnum) let lnum = lnum + 1 if got_cols == 1 if line =~ "^\t\t" " 至少两个 tab , 以防止错误的判断 (to prevent false-positives). let got_tabs = 1 break endif endif if line =~ ":\s*$" let got_cols = 1 else let got_cols = 0 endif endwhile return got_tabs endfunction " 检查该文件,并运行相关函数。 function PyIndentAutoCfg() if PyIsTabIndent() == 1 call PyTabsCfg() else call PySpacesCfg() endif endfunction " 调用 PyIndentAutoCfg 函数。如果你已经把该脚本复制到 python.vim 语法文件中 " 或做了类似的事情的话,取消下面这行的注释。 " call PyIndentAutoCfg() 相关评论: ---------- 非常有用的技巧!我把 PyIsTabIndent() 改了一下,这样他就能适应大多数常见的 编程语言了。 function! PyIsTabIndent() let lnum = 1 let max_lines = 100 " 最大检查行数。 let got_tabs = 0 while lnum <= max_lines let line = getline(lnum) let lnum = lnum + 1 if line =~ '^\t\t\(if\|while\|do\|for\|public\|private\|char\|int\|float\|double\|call\)\>' let got_tabs = 1 break endif endwhile return got_tabs endfunction