让Vim打开新块,如Sublime Text 2

让Vim打开新块,如Sublime Text 2,vim,sublimetext2,Vim,Sublimetext2,在升华文本2中,当您: 块{ 它将生成(其中管道是光标): 我怎样才能让维姆这样做 我打开了autoindent,关闭了smartindent,因为使用smartindent它在返回时执行此操作: BLOCK { |} 更清楚地说,我特别寻找2个返回,向上移动一行,并在其中进行制表(具体为2个软制表符)。我已经有了自动匹配字符的功能,如{,(,[等)。我对vim插件做了一些快速挖掘(这通常是解决此类问题的方法).我想我还没有找到你想要的东西:有,但没有在右括号前插入额外的换行符 你可以这样做

在升华文本2中,当您:

块{

它将生成(其中管道是光标):

我怎样才能让维姆这样做

我打开了
autoindent
,关闭了
smartindent
,因为使用
smartindent
它在返回时执行此操作:

BLOCK {
 |}

更清楚地说,我特别寻找2个返回,向上移动一行,并在其中进行制表(具体为2个软制表符)。我已经有了自动匹配字符的功能,如
{
[
等)。

我对vim插件做了一些快速挖掘(这通常是解决此类问题的方法).我想我还没有找到你想要的东西:有,但没有在右括号前插入额外的换行符

你可以这样做

imap { {<return><return>}<up><tab>
  • 也做

    inoremap <buffer> <enter> <esc>:call CloseBraceIfOpened()<enter>A
    
    要在默认情况下启用它,请添加

    set autoindent smartindent
    

    为了
    ~/.vimrc

    我对vim插件做了一些快速挖掘(这通常是这类问题的解决方案)。我想我还没有找到你想要的:有,但没有在右括号之前插入额外的换行符

    你可以这样做

    imap { {<return><return>}<up><tab>
    
  • 也做

    inoremap <buffer> <enter> <esc>:call CloseBraceIfOpened()<enter>A
    
    要在默认情况下启用它,请添加

    set autoindent smartindent
    

    ~/.vimrc

    在使用TextMate之前,现在使用的是ST2

    基本上你有两条路要走

    • 哑路径

      这种方法有几十种变体:您只需创建一个映射,执行实现目标所需的一系列按键:

      inoremap {<CR> {<cr><cr>}<C-o>k<tab>
      
      inoremap{{}k
      
      我称之为“愚蠢”,但这并不意味着你会愚蠢地使用它:它技术含量低,没有依赖性,易于定制,可以映射到你喜欢的任何东西

    • 智能方法

      这个方法涉及到插件的使用。我使用,但有选择你的毒药


      • 在使用TextMate之前,现在使用的是ST2

        基本上你有两条路要走

        • 哑路径

          这种方法有几十种变体:您只需创建一个映射,执行实现目标所需的一系列按键:

          inoremap {<CR> {<cr><cr>}<C-o>k<tab>
          
          inoremap{{}k
          
          我称之为“愚蠢”,但这并不意味着你会愚蠢地使用它:它技术含量低,没有依赖性,易于定制,可以映射到你喜欢的任何东西

        • 智能方法

          这个方法涉及到插件的使用。我使用,但有选择你的毒药


        简单的映射适用于大多数目的:

        imap {<cr> {<cr>}<c-o>O
        
        imap{{}O
        

        根据插件的不同,一些用户可能需要
        inoremap
        而不是
        imap

        一个简单的映射可以用于大多数目的:

        imap {<cr> {<cr>}<c-o>O
        
        imap{{}O
        

        根据插件的不同,一些用户可能需要
        inoremap
        而不是
        imap

        我使用以下映射:

        inoremap {{ {<CR><CR>}<ESC>kcc
        
        inoremap{{}kcc
        

        因此,我没有使用
        {
        而是使用此映射。除此之外,我还使用了Romaill提到的插件,用于其他带大括号的映射。

        我使用以下映射:

        inoremap {{ {<CR><CR>}<ESC>kcc
        
        inoremap{{}kcc
        

        因此,我没有使用
        {
        而是使用了此映射。除此之外,我还使用了Romaill提到的插件,用于其他带大括号的映射。

        我遇到了同样的问题,而Divertimate解决了它。安装后,您可以使用以下工具启用它:

        let g:delimitMate_expand_cr = 1
        
        有很多黑客提供了SublimiteText体验。因为我感到沮丧,我创建了一个项目,在单个vim发行版中包含所有这些功能(无需安装/编译外部插件/工具)


        您可以从这里查看它:

        我遇到了相同的问题,DifficMate解决了它。安装后,您可以通过以下方式启用它:

        let g:delimitMate_expand_cr = 1
        
        有很多黑客提供了SublimiteText体验。因为我感到沮丧,我创建了一个项目,在单个vim发行版中包含所有这些功能(无需安装/编译外部插件/工具)


        您可以从这里查看:

        智能缩进不能做到这一点。它实际上让情况变得更糟。它会创建块,如:Oops,让我编辑我的OP。我让它自动创建匹配的
        {
        使用另一个选项。问题是创建两个返回值,并使用制表符/soft-tab将光标放在块之间。谢谢,但插入自动匹配字符不是我需要的。我的Vim设置已经做到了。我专门寻找自动返回和制表符。非常奇怪…在JS文件中它不起作用。在我的vimrc文件中这很有效。
        noremap{{}
        。我也尝试了
        imap
        。当你在其他文件中使用它时会发生什么?智能缩进不会这样做。它实际上会让它变得最糟糕。它会创建块,比如:哎呀,让我编辑我的OP。好吧,我让它自动创建匹配的
        {
        使用另一个选项。问题是创建两个返回值,并使用制表符/soft-tab将光标放在块之间。谢谢,但插入自动匹配字符不是我需要的。我的Vim设置已经做到了。我专门寻找自动返回和制表符。非常奇怪…在JS文件中它不起作用。在我的vimrc文件中这是有效的。
        noremap{{}
        。我也尝试了
        imap
        。当你在其他文件中使用它时会发生什么情况?
        imap{{}O
        ;根据你的插件,你可能需要使用
        inoremap
        @Kevin只需等待一秒钟,然后在
        {
        。至少在一个空白文件、没有扩展名和.js文件中,没有新行或任何内容。在
        {
        ?多年来,它一直对我非常有效。@Kevin oooh,我希望它能自动完成。谢谢!可能就是这样!我在O后面加了两个空格,它似乎完全符合我的要求。你能让t吗