更快地输入控制流语句(在 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)
片段引擎是做同样事情的流行方式。这次,您将能够键入 i
或 if
,然后键入 <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
。
如果有人知道不用插件的更好方法,欢迎提出建议。
我是 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.
评价三点:一是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)
片段引擎是做同样事情的流行方式。这次,您将能够键入 i
或 if
,然后键入 <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
。
如果有人知道不用插件的更好方法,欢迎提出建议。