论如何在一个非面对对象的语言中实现模块系统(把 vim 玩成这样我也是奇葩)

2015-04-18 05:24:05 +08:00
 bramblex

引:玩过vim的同学都应该知道vim配置文件是很蛋疼,深入点玩过vim的同学大概知道vim的配置文件其实建立在vim自己的脚本语言vimscript(viml)上面的。但是vimscript这个语言真心蛋疼啊,没有emacs大法的lisp好用啊艹。所以没办法,那就自己造造轮子,让vimscript好用写咯。

因为用着实在蛋疼,然后自己默默地写了一套类似nodejs里面require()的模块机制出来……对,就是用着蛋疼的vimscript,然后为vimscript写的。

Github: 代码戳这里,求星星

好了,废话不多说,直接先上效果来看看我的vimrc长啥样。

”vimrc
let base_path = fnamemodify(resolve(expand('<sfile>:p')), ':h')
exec 'source ' . resolve(base_path . '/require.vimrc')

let config = Require('config')
let utils = Require('utils')

Require modules
Error: language "VimL" is not supported

没错我的vimrc就长这样,聪明的你一定看出来了。关键在哪里?Require!然后再看看被Require的 utils 和 moduels 都是啥。

”utils/base.vimrc
call Exports('utils', Require('utils'))
            \('file', Require('file'))
            \('dict', Require('dict'))
            \('man', Require('man'))
Error: language "VimL" is not supported
”moduels/base.vimrc
Require head

Require bundle
Require hotkeys/base
Require themes
Require type

Require tail
Error: language "VimL" is not supported

如果你没折腾过Vimscript,你看到这东西一定一点都不激动。因为别的语言中都特么是标配的东西,我这里还需要自己实现。真心泪流满面啊TwT。

Github: 代码戳这里,求星星

2871 次点击
所在节点    Vim
5 条回复
xiiing
2015-04-18 07:19:17 +08:00
加个星
vietor
2015-04-18 08:45:55 +08:00
记得在Ubuntu上安装,依赖了Ruby,一生黑
bramblex
2015-04-18 09:32:48 +08:00
@xiiing 谢谢猩猩 OwO
bramblex
2015-04-18 09:33:36 +08:00
@vietor 依赖Ruby还好,ruby现在也差不多是unix系标配了
omph
2015-05-29 18:16:23 +08:00
不明觉厉,星之

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/184487

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX