使用换行符Vim自动缩进

时间:2010-12-18 06:56:35

标签: vim indentation

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

class {
  |
}

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

class {
|}

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

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

更新

我找到了如何使用inoremap { {<CR>}<Esc>O

执行此操作

6 个答案:

答案 0 :(得分:21)

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

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

答案 1 :(得分:19)

我有Ubuntu 12.04,我在主目录中找不到vimrc文件。全局vimrc文件位于/etc/vim/vimrc
这个文件几乎没有。所以对我来说,它将3行添加到/etc/vim/vimrc

的末尾
set autoindent
set cindent
inoremap { {<CR>}<up><end><CR>

下次按{组合更改{时,请输入,},向上,结束,回车。 cindentautoindent会添加所需数量的Tab。
附:我不善于调整vim所以一些解释可能不那么准确。这就是我认为它的工作原理。

答案 2 :(得分:12)

将它放在.vimrc中:

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

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

答案 3 :(得分:11)

autoindent表示它将当前缩进级别转移到后续行。要根据语法对其进行缩进,您还需要指定smartindentcindent等标记。

答案 4 :(得分:0)

在文件底部,我使用:

StringFormat={x:Static local:MainWindow.StaticProperty}}

例如void launchThread() { std::shared_ptr<std::thread> t; t = std::make_shared<std::thread>([t] {std::cout<< "HelloWorld"<<std::endl;}); t->detach(); } int main(){ launchThread(); somthing that takes a while.... }

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

如果您只想保留缩进,请使用Dockerfile

答案 5 :(得分:0)

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