问题
I would like to indent everything in vim with tabs, except a particular case. For example I have this c++ code(where <tab> is a tab character series and <s> is a space character series):
<tab>if(true &&
<tab><s>true)
<tab>{
<tab><tab>//code here
<tab>}
I would like after writing '&&' and press 'o' to jump on the next line and start writing to make vim put a tab and the number of spaces till '(' from the line before.
Is it possible to define this coding style in vim?
Thanks!
回答1:
I think what you're looking for is the (N option for cinoptions.  Try set cinoptions+=(0.  According to the documentation, this looks like the alignment that you seek.
More information can be found by using help command: :help cinoptions-values or looking at the online version of the help for cinoptions-values.
As far as tabs go, you'll want to disable expandtab with :set noexpandtab, and you'll want to make sure your tabstops, soft tabstops, and shiftwidth are all set accordingly.  As an example, the Linux source code uses a style like you mention above, and I have this in my vimrc:
setlocal ts=8 sts=8 sw=8 tw=80
" Don't expand tabs to spaces.
setlocal noexpandtab
" Enable automatic C program indenting.
setlocal cindent
" Don't outdent function return types.
setlocal cinoptions+=t0
" No extra indentation for case labels.
setlocal cinoptions+=:0
" No extra indentation for "public", "protected", "private" labels.
setlocal cinoptions+=g0
" Line up function args.
setlocal cinoptions+=(0
" Setup formatoptions:
"   c - auto-wrap comments to textwidth.
"   r - automatically insert comment leader when pressing <Enter>.
"   o - automatically insert comment leader after 'o' or 'O'.
"   q - allow formatting of comments with 'gq'.
"   l - long lines are not broken in insert mode.
"   n - recognize numbered lists.
"   t - autowrap using textwidth,
setlocal formatoptions=croqlnt
回答2:
Add following in your .vimrc
set tabstop=2
set expandtab
set shiftwidth=2
set smarttab
set linebreak
set smartindent
set cindent
set autoindent
This is all you need to roll out awesomeness in vim. :)
来源:https://stackoverflow.com/questions/15729023/vim-align-continous-lines-with-spaces