在Vim中从插入模式有效地导航出封闭的花括号

在Vim中从插入模式有效地导航出封闭的花括号,vim,Vim,例如: int function() { //assume cursor is on this line, or any lines within the function's bounds //code //more code } //I want to move my cursor here, or the line below //Ultimately I want to be in insert mode here int function() { fo

例如:

int function() {
    //assume cursor is on this line, or any lines within the function's bounds
    //code
    //more code
} //I want to move my cursor here, or the line below
//Ultimately I want to be in insert mode here
int function() {
    for (int i = 0; i < 2; i ++) {
        //code
        //cursor is here
    } //I want to move my cursor here, or the line below
    //I want to move my cursor here, right below the closing brace, and be in insert mode
} //more code
目前,我所做的是使用
jj
(映射到Esc)退出插入模式,然后使用
]}
导航到右大括号。然后,将光标放在大括号上,键入
a
,然后键入
这样我就可以在函数块下面的插入模式下继续键入其他代码。有没有更有效的方法?我想到了
后面跟着
]}
,但这会将光标放在大括号前面,而不是后面。。。也许解决这类问题的最佳方法是将类似
的东西映射到
]}
?肯定还有比这更简单的事情吗?我觉得这是一种常见的情况,它确实减慢了我的vim编码流程,我希望看到其他人如何在vim中处理这种情况!很抱歉,如果这是一个如此简单的问题,但我试图寻找一个解决方案,但没有任何效果。有什么想法吗?多谢各位

编辑: 我还想知道如何实现这一点,使我能够直接在光标所在的包围括号下方插入模式(参见下面的示例)。当前,如果我的光标位于该支架上,并且我处于正常模式,如果我点击
o
,则满足此条件。类似地,如果我处于插入模式,并且光标位于大括号的右侧,并且我按enter键,则满足此条件。但是,在插入模式下,如果光标未放在大括号上,是否有一种快速的方法来执行此操作?例如,是否有一种将
映射到
]}o
的方法?这混淆了正常模式和插入模式贴图,所以我对如何操作感到困惑

另一个例子:

例如:

int function() {
    //assume cursor is on this line, or any lines within the function's bounds
    //code
    //more code
} //I want to move my cursor here, or the line below
//Ultimately I want to be in insert mode here
int function() {
    for (int i = 0; i < 2; i ++) {
        //code
        //cursor is here
    } //I want to move my cursor here, or the line below
    //I want to move my cursor here, right below the closing brace, and be in insert mode
} //more code
int函数(){
对于(int i=0;i<2;i++){
//代码
//光标在这里
}//我想将光标移到这里或下面的行
//我想将光标移到这里,右大括号下方,并处于插入模式
}//更多代码
移动到右大括号并在其下方打开新行

这就是要按下的三个键,除了将其映射到一个较短的键序列之外,我看不出如何更有效地进行操作

---编辑---

您可以使用此插入模式映射从插入模式执行相同的操作:

inoremap <C-e> <C-o>]}<C-o>o
inoremap]}o
但我显然建议尽可能长时间不使用插入模式

移动到右大括号并在其下方打开新行

这就是要按下的三个键,除了将其映射到一个较短的键序列之外,我看不出如何更有效地进行操作

---编辑---

您可以使用此插入模式映射从插入模式执行相同的操作:

inoremap <C-e> <C-o>]}<C-o>o
inoremap]}o

但我显然建议尽可能长时间不使用插入模式。

下面的内容略短一些

  • 后跟
    /}/e+1
    移动到匹配+1列的末尾
  • /}/+1
    移动到匹配+1行

以下是略短的

  • 后跟
    /}/e+1
    移动到匹配+1列的末尾
  • /}/+1
    移动到匹配+1行

    • 在这种情况下(在许多其他情况下),我通常会一直按},直到到达正确的线路。当然你可以使用搜索或
      ]
      或其他工具,但如果只是上面的一段或两段,按
      }
      会更快。

      在这种情况下(在许多其他情况下),我通常会一直按},直到找到正确的行。当然你可以使用搜索或
      ]
      或其他工具,但如果只是上面的一段或两段,按
      }
      会更快。

      谢谢,这很好!但是,如果我希望光标正好位于封闭的大括号下方,比如c中的嵌套for循环,会怎么样?尝试上述操作似乎只会将光标放在封闭的大括号后面的行的最开始处,而不一定直接放在它的下面。那太好了@删除e会带你进入下一行。我编辑了我的文章,给出了第二个例子。如果是那样的话,你会怎么到处走动呢?谢谢你的帮助!谢谢,真漂亮!但是,如果我希望光标正好位于封闭的大括号下方,比如c中的嵌套for循环,会怎么样?尝试上述操作似乎只会将光标放在封闭的大括号后面的行的最开始处,而不一定直接放在它的下面。那太好了@删除e会带你进入下一行。我编辑了我的文章,给出了第二个例子。如果是那样的话,你会怎么到处走动呢?谢谢你的帮助!是的,这绝对是最有效的。但是有没有一种方法可以将像
      这样的键映射到该键,以便在插入模式下执行此操作?我对vim还比较陌生,对这种情况下映射的工作方式有点困惑。这很好,谢谢。我知道有效使用vim的关键之一是尽可能不使用插入模式,但是如果我们正在编写带有自动完成括号的新代码,这不是一个理想的映射吗?例如,如果我编写一个简单的函数,我会键入“{”,它会在光标后面插入一个“}”。然后我点击回车键并输入我的函数实现。当我完成此操作后,我可以使用类似于上面的映射的东西继续函数下面的操作,这似乎是理想的。对我来说,这是一个巨大的省时,但我是新的维姆。你对此有何看法?我使用自动关闭已经将近十年了,直到我决定它造成的麻烦比它解决的要多,并从我的工作流程中删除了该功能。是的,这绝对是最有效的。但是有没有一种方法可以映射一个像<