VIM脚本的好指南?

54

我使用VIM已经十多年了,但从未真正涉及过VIM脚本编写(总是主观地认为这是VIM比Emacs更弱的领域之一)。

最近,“在VIM脚本中,我可以执行普通模式命令”的认识让我恍然大悟,突然开始意识到为什么VIM脚本的某些部分是这样的。

normal ma10jd'a20kp

比...更优雅

Marker m = currentLocation();
advanceLines(10);
Buffer b = delete(currentLocation(), m);
advanceLines(-20);
insertBuffer(b);

现在的问题是:有什么好的资源可以学习vim脚本编写?

谢谢!

4个回答

58

我能给出的最佳建议是你阅读:

:help usr_41.txt

阅读这些内容可以帮你快速了解基础知识。接着找一些想要完成的任务,并为它们创建函数。在此过程中,大量使用以下内容:

:help function-list

了解所有内置功能的想法。大部分都与其他脚本语言类似(尽管语法更为严格),因此您在Python或其他任何文本操作方面的经验都将非常有用。

此外,可以查看vim脚本页面Google,以获取现有脚本的示例,帮助扩展您的知识。

最后(可能也是最重要的),不要害怕在stackoverflowVim邮件列表上提问,会有很多支持来解决您遇到的任何问题。


38

5
我发现这本书是学习Vimscript非常好的资源! :) - pwseo

16

我处于类似的情况。这篇文章仍在我的“待阅读”清单中,但我今天刚发现了Scripting the Vim editor。IBM开发者社区的文章通常都非常好,所以可能值得一看。


2
我今天学了一点vimscript,IBM DevWorks指南非常好,但我从第一部分开始学习。(答案链接到第三部分。)http://www.ibm.com/developerworks/linux/library/l-vim-script-1/index.html - Richard Michael
非常感谢这篇文章,@RichardMichael - 这正是我一整天一直在寻找的阅读材料! - rm-vanda

16

阿尔给了你一个好的答案。我还想添加一些关于你问题的小贴士,可以在vim.wikia上找到。

顺便说一句。

我不会说ma10jd'a20kp更加优雅。我看到以下几个问题:

  • 它很难维护(如果行数变成参数怎么办?)
  • 人们喜欢覆盖他们从未学过的按键(这可以通过加上感叹号的:normal!来解决)
  • 有些普通模式命令在特殊情况下会产生奇怪的行为(比如光标位于第一列时按<esc>),
  • 它会破坏标记a和无名寄存器——其他脚本或甚至用户可能希望它们的值不被您的脚本更改。

3
我误读原帖,以为它明显是“不如优雅”!否则我本该对难以维护的':normal'行进行评论。我倾向于仅在找不到良好的脚本构造方式时才使用':normal'。要么手动逐个输入键,要么编写一个可以维护的适当函数。 - DrAl
vim.wikia的链接已经失效。 - rosshjb
1
感谢@jinbeomhong。_Wikia_已经变成了_fandom_。我已经更新了链接。 - Luc Hermitte

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接