更快地输入控制流语句(在 C 和 php 等中)?

Faster way to type control flow statements (in C and php etc)?

我是 Vim 的新手,我需要加快输入此类语句的速度。

if (a == 'e') {
   foo();
}

在其他文本编辑器中,我通常先输入if() {},然后将文本插入括号和花括号中。如果我在 Vim 中执行此操作,我需要切换回正常状态,将光标移动到 () 的中间,然后移动到 {} 的中间...在 i 和 [= 之间切换16=] ...

对于 Vim 初学者输入这种语法,您有什么建议?如果您能逐步向我展示该示例的命令,我将不胜感激。

这是一个片段扩展的工作。看看SnipMate or UltiSnips.

snippets 就像类固醇的内置 :abbreviate 一样,通常在其中包含参数插入、镜像和多个停止。 snipMate (inspired by the TextMate editor); unfortunately, it's not maintained any more; though there is a fork. A modern alternative (that requires Python though) is UltiSnips. There are more, see this list on the Vim Tips Wiki.

是第一个非常有名(并且仍然被广泛使用)的 Vim 插件

评价三点:一是snippet引擎本身的特点,二是作者或他人提供的snippet的质量和广度;第三,添加新片段是多么容易。

有两种方法可以解决您的目标:

  • 缩写
  • 和片段引擎

缩写和旧的做事方式。您只需键入 if 和 space,然后 tada!您会在网络上找到大量示例。只有少数是上下文相关的(即它们不会在注释或字符串上下文中扩展),或者能够考虑当前项目间距样式。在 lh-cpp, you'll find the usual control-statement abbreviations for C and C++, they'll need to be duplicated for similar languages (a runtime ftplugin/c/c_snippets.vim from a php ftplugin should do it in your case)-- in lh-misc 中,我支持其他几种语言(对于 VimL 和 shell)

片段引擎是做同样事情的流行方式。这次,您将能够键入 iif,然后键入 <tab>(或 CTRL+SPACE,或...)。控制语句片段不需要知道当前上下文,因为我们需要明确要求扩展。其他人已经提供了指向流行片段引擎的链接。来自 lh-cpp(依赖于 mu-template)的片段在扩展控制语句片段时考虑了 project style(即一些项目希望 ){ 在同一行,其他想要在两者之间换行,...)

这是我的答案,以防你想要搭配原版 Vim。

我想在大多数情况下,先输入括号然后再填写条件是没有意义的,只需立即全部输入即可:

if (a == 'e')

然后你可以继续

  • 通过输入 {}<ESC>:

    if (a == 'e') {}
                   ^ cursor is here
    

    光标已经放置,因此您可以继续 i<CR> 并键入正文(如果配置正确,Vim 应该为您缩进)。

  • 或输入 {<CR>}<ESC>:

    if (a == 'e') {
    }
    ^ cursor is here
    

    然后您可以按O(在光标上方打开新行)输入正文。可能 Vim 也会在此处自动缩进(我的配置中没有)。

如果你真的想在输入后填写条件:

if () {
}
^ cursor

您可以输入 kf(a


如果有人知道不用插件的更好方法,欢迎提出建议。