我碰巧在代码中工作,其中某些模块使用制表符进行缩进,而其他模块则使用空格。许多文本编辑器(例如Np++)具有某种自适应的制表符功能,如果前一行(或代码块)使用空格或制表符,则使用空格来缩进。

我还没有在Vim中看到过这样的东西。是否有任何这样的插件或设置?

最佳答案

我希望像下面的示例所示来设置我的环境。我制定了一个一般规则,即用空格替换制表符,并在需要覆盖该规则时使用augroup。 Makefile是一个很好的例子,说明何时可能需要TABS,而cpp文件是何时需要空格。

" A tab produces a 4-space indentation
:set softtabstop=4
:set shiftwidth=4
:set expandtab
" replace tabs with spaces unless noted otherwise

" <snip>

augroup CPPprog
   au!
   "-----------------------------------
   " GENERAL SETTINGS
   "-----------------------------------
   au BufRead,BufNewFile,BufEnter             *.cpp,*.c,*.h,*.hpp   set nolisp
   au BufRead,BufNewFile,BufEnter             *.cpp,*.c,*.h,*.hpp   set filetype=cpp
   au FileType                                *                     set nocindent smartindent
   au FileType                                *.c,*.cpp             set cindent
   au BufRead,BufNewFile,BufEnter             *.cpp                 let g:qt_syntax=1
   " turn on qt syntax highlighting (a plugin)
   au BufNewFile,BufRead,BufEnter             *.c,*.h,*.cpp,*.hpp   let c_space_errors=1
   " trailing white space and spaces before a <Tab>

   " <snip>

augroup END

" <snip>

augroup filetype
  au! BufRead,BufNewFile,BufEnter *Makefile*,*makefile*,*.mk set filetype=make
augroup END
" In Makefiles, don't expand tabs to spaces, since we need the actual tabs
autocmd FileType make set noexpandtab

关于vim - vim中的自适应制表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6950063/

10-13 08:35