Vim 自动缩进换行

发布于 2024-10-08 09:15:29 字数 334 浏览 2 评论 0原文

我如何让vim将光标放在大括号内以新行开始,即用|表示光标位置:

class {
  |
}

现在使用我的设置,它只会执行此操作,

class {
|}

我在 .vimrc 文件中得到了这个 set autoindent shiftwidth=2 tabstop=2 noexpandtab

基本上我只想知道普通的 IDE 如何缩进它。

更新:

我找到了如何使用 inoremap { {}O 执行此操作

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

微暖i 2024-10-15 09:15:29

我有 Ubuntu 12.04,我在主目录中没有发现 vimrc 文件。全局 vimrc 文件位于 /etc/vim/vimrc 中。

这个文件里几乎什么都没有。所以对我来说,将这 3 行添加到 /etc/vim/vimrc 的末尾

set autoindent
set cindent
inoremap { {<CR>}<up><end><CR>

,当你下次输入 { 时,它将被组合 更改{,输入,},向上,结束,输入。 cindentautoindent 将添加所需数量的制表符。

PS 我不擅长调整 vim,所以有些解释可能不太准确。我认为这就是它的运作方式。

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.

撕心裂肺的伤痛 2024-10-15 09:15:29

我发现 delimitMate 完全按照您所描述的方式进行操作(即自动插入结尾的 })。请注意,您必须通过在配置中添加 let delimitMate_expand_cr=1 来告诉 delimitMate 展开回车符。

根据我的观察,这正是 TextMate 和 SublimeText 中发现的行为。

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.

贵在坚持 2024-10-15 09:15:29

将其放入您的 .vimrc 中:

imap <C-Return> <CR><CR><C-o>k<Tab>

假设 autoindentsmartindent 设置正确,在大括号之间键入 Ctrl + Return 会将光标放在您想要的位置成为。

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.

烟凡古楼 2024-10-15 09:15:29

autoindent 指的是它将当前的缩进级别转移到后续行。要使其根据语法缩进,您还需要指定一个标志,例如 smartindentcindent

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.

时光磨忆 2024-10-15 09:15:29

我在 .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

上面的代码首先检查您是否使用 Enter 来确认代码完成,如果没有,它将缩进 {|} 当您输入 Enter 时。此外,它还提供 html 标签自动缩进。

对于您的问题:

class {|}

Enter,您将得到

class {
    |
}
<html>|<html>

Enter,您将得到

<html>
    |
</html>

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>
空城缀染半城烟沙 2024-10-15 09:15:29

在文件底部,我使用:

# vim: ts=2 sw=2 sts=2 sr noet st ai si

例如 Dockerfile

FROM centos-7
RUN ...
CMD ...

# vim: ts=2 sw=2 sts=2 sr noet st ai si

如果您只想保留缩进,请使用 # vim: st ai si

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文