codecamp

Vimscript 还剩下什么?

如果已经读到了这里并且完成了所有的例子和练习,你现在对Vimscript基础的掌握就很牢固了。 不要担心,还有_许多_东西需要学呢!

如果你求知若渴,这里还有一些东西值得你去探索。

配色方案

在本书中我们给Potion文件添加了语法高亮。作为硬币的另一面,我们也可以创建配色方案来决定每种语法元素的颜色。

制作Vim的配色方案非常简单直白,甚至有点重复。阅读:help highlgiht来学习基础知识。 你可能想要看看一些内置的配色方案来看他们怎么组织文件的。

如果你渴望挑战,看看我自己的灰太狼配色方案来了解我是怎么用Vimscript来为我简化定义及维护工作的。 注意"palette"字典和HL函数,它们动态地生成highlight命令。

Command命令

许多插件允许用户使用键映射和函数调用来交互,但有一些偏好使用Ex命令。 举个例子,Fugitive插件创建类似:Gbrowse:Gdiff并把调用它们的方式留给用户定制。

像这样的命令是通过:command命令创建的。阅读:help user-commands来学习怎样给自己制作一个。 你应该已经学会了足够的Vimscript知识来帮助自己理解Vim文档,并以此来学习新的命令。

运行时路径

在本书中,关于Vim怎么加载某个文件时,我都是用"使用Pathogen"应付过去的。 鉴于你已经懂得了许多Vimscript知识,你可以阅读:help runtimepath并查看Pathogen源代码 来找出幕后隐藏的真相。

Omnicomplete

Vim提供了许多不同的方法来补全文本(浏览:help ins-completion)。 大多数都很简单,但其中最强大的是"omnicomplete", 它允许你调用一个自定义的Vimscript函数来决定你想到的各种补全方式。

当你决定对omnicomplete一探究竟,你可以从:help omnifunc:help coml-omni开始你的征途。

编译器支持

在我们的Potion插件中,我们创建了一些编译并执行Potion文件的映射。 Vim提供了更深入的支持来跟编译器交互,包括解析编译器错误并生成一个整洁的列表让你跳转到对应的错误。

如果你对此感兴趣,你可以从通读整篇:help quickfix.txt开始深入。 不过,我得提醒你errorformat不适合心脏虚弱的人阅读。

其他语言

这本书专注于Vimscript,但Vim也提供了其他语言的接口,比如Python, Ruby, 和Lua。 这意味着如果不喜欢Vimscript,你可以使用其他语言拓展Vim。

当然还是需要了解Vimscript来编辑你的~/.vimrc,和理解Vim提供给其他语言的API。 但使用一个替代语言可能是从Vimscript的局限之处解放出来的好办法,尤其在写大型插件的时候。

如果你想了解更多用特定语言拓展Vim,查看下列对应的帮助文档:

  • :help Python
  • :help Ruby
  • :help Lua
  • :help perl-using
  • :help MzScheme

Vim文档

作为最后的部分,这里列出了一些Vim帮助条目,它们非常有用,有趣,有道理,或者仅仅是好玩(排名不分先后):

  • :help various-motions
  • :help sign-support
  • :help virtualedit
  • :help map-alt-keys
  • :help error-messages
  • :help development
  • :help tips
  • :help 24.8
  • :help 24.9
  • :help usr_12.txt
  • :help usr_26.txt
  • :help usr_32.txt
  • :help usr_42.txt

练习

去为你想要的功能写一个Vim插件,向全世界分享你的成果!

Vimscript 发布
Vim 备忘单
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

vi命令手册

Vimscript编程参考

Vim 其他内容

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }