问题
How do I get vim to place the cursor within the braces starting on a new line, ie with | denoting the cursor position :
class {
|
}
right now with my settings it only does this
class {
|}
I got this in my .vimrc file set autoindent shiftwidth=2 tabstop=2 noexpandtab
Basically I just want how a normal IDE would indent it.
update:
I found how to do this with inoremap { {<CR>}<Esc>O
回答1:
Put this in your .vimrc :
imap <C-Return> <CR><CR><C-o>k<Tab>
Assuming autoindent
and smartindent
are set correctly, typing Ctrl + Return
between braces will put your cursor where you want it to be.
回答2:
I found that delimitMate does exactly what you describe and more (that is, automatically inserting the ending }
). Note you have to tell delimitMate to expand carriage returns by adding let delimitMate_expand_cr=1
to your config.
From my observation, this is exactly the behaviour found in TextMate and SublimeText.
回答3:
I have Ubuntu 12.04 and I found no vimrc
file in home directory. Global vimrc
file was in /etc/vim/vimrc
.
There was almost nothing in this file. So for me it worked to add this 3 lines to the end of /etc/vim/vimrc
set autoindent
set cindent
inoremap { {<CR>}<up><end><CR>
When you will type {
next time it will be changed by combination {
, Enter, }
, up, end, Enter. cindent
and autoindent
will add required amount of Tab's.
P.S. I'm not good in tuning up vim so some explanations may be not so accurate. It's how I think it works.
回答4:
autoindent
refers to it carrying over the current indentation level onto subsequent lines. To get it to indent according to syntax, you need to specify a flag like smartindent
or cindent
as well.
回答5:
At bottom of the file, I'm using:
# vim: ts=2 sw=2 sts=2 sr noet st ai si
For example Dockerfile
:
FROM centos-7
RUN ...
CMD ...
# vim: ts=2 sw=2 sts=2 sr noet st ai si
If you want keep the indentation only, use # vim: st ai si
回答6:
I wrote this in my .vimrc
inoremap <expr> <CR> InsertMapForEnter()
function! InsertMapForEnter()
if pumvisible()
return "\<C-y>"
elseif strcharpart(getline('.'),getpos('.')[2]-1,1) == '}'
return "\<CR>\<Esc>O"
elseif strcharpart(getline('.'),getpos('.')[2]-1,2) == '</'
return "\<CR>\<Esc>O"
else
return "\<CR>"
endif
endfunction
The code above first check if you are using Enter
to do confirm a code completion, if not it will indent the {|}
when you type Enter
. Also, it provides html tags auto indent.
For your problem:
class {|}
press Enter
and you will get
class {
|
}
<html>|<html>
press Enter
and you will get
<html>
|
</html>
来源:https://stackoverflow.com/questions/4477031/vim-auto-indent-with-newline