有用vim的吗?请教个插件名字。。
发布于 10 年前 作者 petitspois 5291 次浏览 最后一次编辑是 8 年前 来自 问答

untitled1.png

如图有知道叫什么的吗?

14 回复

你是说vim-airline 的tabline?

我用NerdTree,目录,buffer,Tab全齐了。

http://www.vim.org/scripts/script.php?script_id=1658

@ruanyl 是你说的这个。

@coordcn NerdTree 之前用过,还是习惯ls 了

@coordcn 刚用上,表示不会用Tab 你平时用NerdTree来做啥? 感觉这货就是个文件浏览器,哈哈

@chapgaga Nerdtree窗口焦点的情况下,按?看帮助,快捷键都有,我一般就用鼠标点点,新增文件按r更新下,需要新tab选中文件t一下,基本就这些处了,它就是个文件浏览器。

@coordcn 用vim不就是为了摆脱鼠标么,你不用Ctrl+w hjkl,习惯用鼠标么?

@chapgaga 我觉得现有的编辑速度够用了,每天就100行不到(粘贴复制至少一半),鼠标快捷键差别不大。

程序最重要的是算法,算法是思考来的,编码就是把脑子里想的实现而已,编码的速度其实不是由编辑速度决定的,而是由思维速度决定的。上个礼拜碰到一个内存访问错误,一个礼拜都没写出一行有效代码,人都要奔溃了,最后竟然是uv_timer_t没有close,这个低级错误造成的恶果就是程序莫名其妙的奔溃。

我现在在用libuv+lua实现类似nodejs的web服务器。

https://github.com/coordcn/links

已经实现了多进程,tcp,dns,process,system等模块,性能上肯定不会比node差。lua代码都是同步的,不需要回调。

这个帖子里我给了例子https://cnodejs.org/topic/55838f3401d3ce0d73d68ead

@coordcn 每天就写100行? 你现在做啥开发啊? 做页面,不是一天可以写1000行么? 为何不直接用nodejs服务器,要自己造轮子呢?

这个是公司项目么?还是自己瞎折腾呢?

@myylife node自己如果不变革,两三年之后就会没落,去回调,协程化是必然的趋势,javascript虽然也在协程化,但却是遮遮掩掩的,javascript有历史包袱,需要兼容过去的回调代码,所以变革不可能太快。node的创始人又是极力反协程的,但现实是javascript虽然遮遮掩掩,但是还是在协程化。其他语言也在协程化,这个方向肯定没有错,事实证明协程比回调更容易表达异步。协程可以使回调转化为形式同步的代码,回调本身使无法做到的。javascript为什么要加入generator/yield,其本质上就是利用协程来做回调转换。

异步是这个世界的本源,回调不是,回调的问题TJ已经说得很明白了,编程体验太差,具有很强得传染性,错误处理困难,层层回调将业务逻辑碎片化,复杂逻辑表达困难。虽然很多人号称这都不是事,自己回调用得如何如何溜,但如果能够提供一种工具,既能获得异步的好处,又能用同步代码表达逻辑,这些人分分钟就会去写同步代码。

这个项目是我个人项目,现在没有哪个公司愿意搞底层,大多追求短平快,圈到钱是王道,技术什么的只是工具,技术人员也只是工具。去年fibjs让我看到了问题所在,我用node再溜,我仅仅在这个工具内混而已,如果新出一个工具,被市场认可,大家又转向那个工具,你会个node算什么?会node只是会javascript而已,继续转向前端?我最后得出的结论是自己必须要掌握底层的东西,这样不管是node还是其他什么工具,都能融会贯通。基于这个思考,我大略读了fibjs的源代码,代码对v8底层做了hack,自己实现了ucontext(利用c堆栈保存和切换实现协程的基础),fibjs思想上很先进,但具体实现上其他人很难参与,大多数代码都是响马一个写的,我个人不是太看好fibjs的社会化能力,响马的技术很牛,平台也很好,但什么事情都要自己编码,这本生身违背的开源精神。

这个阶段我又接触了openresty,一个nginx的扩展,openresty对每个连接建立一个协程,异步操作通过协程转换为同步代码。nginx的异步实现跟libuv比是比较底层的,跟nginx实现结合得非常紧密,这也就注定了openresty与nginx结合得过于紧密,正是由于这个原因,openresty的代码量非常大,内部实现已经很清晰了,但读起来还是很吃力。我个人觉得openresty是一个划时代的项目,但如果能够从nginx里独立出来,会发展得更好。openresty从根本上实现了去回调,所有异步程序都可以通过同步代码实现。

nginx的了解都是必须的,node在实现上跟nginx还是有相当的差距的,不管是文件处理还是内存处理上,node做得都不够精细。nginx各种配置也很强大。阿里的tengine对nginx又做了很多改进和调优工作,在综合所有项目优缺点得基础上,我决定用libuv+lua实现一个类似openresty的项目,现在socket部分已经将近完成,压力测试结果跟node性能上相当。

提到lua和libuv,luvit是不得不提的,这个项目整个就是node的复刻,如果要说造轮子,这个项目就是造轮子的典型,这个项目也用lua,但却是以回调和事件模式为主,跟node没什么两样,node有的毛病一个都不少。但我还是要感谢这个项目,从这个项目代码中我学到了很多lua的使用方法。

造轮子本身没什么问题的,但是造轮子不能是复刻,我们有时间,有能力造的轮子必须要有所超越,有所改进,否则的话就是完全没有必要,重复别人的思想和代码,顶多是练习,在别人的代码基础上创造自己新的东西才有意义。我自己能力有限,不可能去重新造一个异步库,所以我选择我比较熟悉得libuv,我不可能去重新实现一个脚本语言,所以我选择符合我要求的lua,我不可能自己实现http_parser,自然还是用node的,其他很多东西我都要用别人的,我只是造了很小一部分的东西(整个项目代码不超过1万行),我得到的是一个独立,基于libuv+lua能够用同步代码编写异步程序的,天然支持多进程的,扩展方便的(c写lua扩展几乎没有学习成本),性能与node相当的工具。

当然这个工具还很原始,没有node那么多外围支持,但这只是时间问题,只有大家能够在思想上转变,参与进来,各种库只是时间问题,稳定性,易用性,也只是时间问题,时间会给我们一切答案,可能我的方向未必对,但node现在却实实在在的有很多问题,这些问题造成了TJ的离开,大神肯定是比一般人看得远,如果我们不警醒,也许最后的结果会很残酷。这个论坛的质量也印证了我的担忧,各种糊里糊涂的不知所谓的问题,各种前端,node也许到最后也只能跟人家比库的规模了,javascirpt真的能够前后端通吃?愿望是美好的,现实是残酷的。

@myylife 写c代码,一天能写50行就谢天谢地了,可能我水平不行,不够努力,但也只能这样了。加上粘贴复制同质的代码,顶多150行封顶了,写程序大部分时间是在思考,是在调式,一个bug两三天是常有的。那些一天1000行的是神,我自认为不能跟神比。

@coordcn 给libuv添加lua port? lua没js好吧?为何要用lua?

@chapgaga 不是port, 这个工作有人做了,luvit做了,但我认为毫无意义,整个项目就是node的复刻,node有的问题,luvit一个都不少,根本没有发挥lua的特性,我不会做这种事情的。

对自己不熟悉的语言千万不要随便抱有成见,lua和javascript非常类似,但又各有千秋。javascript有的特性,lua基本全都有,但lua要小巧得多,在性能上,luajit也不输V8(我没有用luajit,我认为单纯的字符串操作,jit的加速其实有限,密集的计算任务就直接c代码搞起了,如果对性能还不满意,做个简单处理就能兼容luajit了);lua与c的交互几乎没有额外的学习成本,对于有计算密集任务的项目来说,直接用c的学习成本跟javascript比相对会低一点;最后就是lua的协程,这个东西是实现回调转形式同步的钥匙,协程说白了就是可以暂停的函数,通过合理的处理,lua可以去除所有协程有关的关键字,让程序看起来像同步,其实是异步的,这对异步编程来说是范式上的变革,javascript也在默默的协程化,generator/yield就是半成品,但javascript只提供了语法层面的协程关键字,在c层面上(我不是太清楚,可能有,可能没有)可能没有像lua一样提供协程接口,这样javascript可能就无法实现无关键字的协程。而且javascript历史包袱太重的,有太多的回调代码要兼容,虽然有一些办法,但毕竟还是要做转换,在思维上还是要绕个弯,没有直接的形式同步代码来得爽快。

https://cnodejs.org/topic/55531a00b8ec4ac201f117d6

@fengmk2叫我写个echo server,我当时很明确的告诉他,我不会去写echo server,那样没有任何意义,要做就在自己能力范围内做一个自己满意的东西出来。

回到顶部