更快的方式来键入控制流语句(在C和PHP等)?

时间:2015-03-26 03:39:37

标签: vim

我是Vim的新手,我需要为这种陈述加快打字速度。

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

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

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

4 个答案:

答案 0 :(得分:2)

这是片段扩展的工作。请查看SnipMateUltiSnips

enter image description here

答案 1 :(得分:1)

片段就像类固醇上的内置:abbreviate一样,通常带有参数插入,镜像和内部多个停止。第一个非常着名(并且仍然广泛使用)的Vim插件之一是snipMate(受 TextMate 编辑器的启发);不幸的是,它不再维持;虽然有a fork。现代替代方案(虽然需要Python)是UltiSnips。还有更多内容,请参阅this list on the Vim Tips Wiki

有三件事要评估:第一,摘录引擎本身的功能,第二,作者或其他人提供的片段的质量和广度;第三,添加新片段是多么容易。

答案 2 :(得分:1)

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

  • 缩写
  • 和片段引擎

缩写和旧的做事方式。你只需输入if和空格,然后输入!您将在网络上找到大量示例。只有少数人会对上下文敏感(即他们不会在评论或字符串上下文中扩展),或者能够考虑当前的项目间距风格。在lh-cpp中,您将找到C和C ++的常用控制语句缩写,它们需要为类似语言复制(来自php ftplugin的runtime ftplugin/c/c_snippets.vim应该这样做在你的情况下) - 在lh-misc我支持其他几种语言(对于VimL和shell)

Snippet引擎是做同样事情的时髦方式。这次,您可以输入iif,然后<tab>(或CTRL+SPACE或...)。由于我们需要明确要求扩展,因此控制语句片段不需要了解当前上下文。其他人已经链接到时尚的片段引擎。来自lh-cpp的片段(依赖于mu-template)在扩展控制语句片段时会考虑project style(即某些项目需要){在同一行上,其他想要在两者之间换行,...)

答案 3 :(得分:0)

如果你想和香草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

来完成此操作

如果有人在没有插件的情况下知道更好的方法,欢迎提出建议。