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

时间:2014-11-21 09:41:49

标签: 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

目前,我正在做的是退出插入模式jj(映射到Esc),然后使用]}导航到结束花括号。然后,将光标放在大括号上,键入a然后<CR>  这样我就可以在功能块下面进入插入模式并继续输入其他内容的代码。有没有更有效的方法呢?我想到了<C-o>后跟]},但这会把我的光标放在大括号之前而不是之后......也许解决这类问题的最佳方法是映射类似{{1到<C-e>?当然还有比这更简单的事情吗?我觉得这种常见的情况确实会减慢我的vim编码流程,并且很想看到别人如何在vim中处理这种情况!对不起,如果这是一个如此简单的问题,但我试图寻找一个无济于事的解决方案。有任何想法吗?非常感谢你。

编辑: 我也想知道如何以一种方式实现这一点,我将在插入模式下直接放置在我的光标所在的封闭支架下面(见下面的例子)。目前,如果我的光标位于此括号并且我处于正常模式,如果我点击<C-o>]}<Right>,则满足此条件。同样,如果我处于插入模式并且我的光标位于大括号的右侧,并且我按下回车键,则满足此条件。但是在插入模式下有没有一种快速的方法来实现这一点,我的光标没有放在支架上?例如,有没有办法将o映射到<C-e>?这混合了正常模式和插入模式映射,所以我对如何操作感到困惑。

另一个例子:

示例:

<C-o>]}o

3 个答案:

答案 0 :(得分:2)

]}o

移动到右括号并在其下面打开一个新行。

三个 键,除了将其映射到较短的键序列之外,我无法看到如何更有效地执行此操作。

---编辑---

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

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

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

答案 1 :(得分:1)

以下有点<C-o>

  • 后跟/}/e+1移至匹配结尾+ 1列
  • /}/+1移至匹配+ 1行

答案 2 :(得分:1)

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