11

acme--失落的黑魔法

 3 years ago
source link: https://www.zenlife.tk/acme.md
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

acme--失落的黑魔法

2014-02-15

acme,这是一个被世人遗忘了的强大工具,我把它称作失落的黑魔法。它是一个shell/窗口管理系统/编辑器。很难对没有使用过它的人描述清楚它是什么。按russ cox的说法,它是一个integrating development environment。(注意IDE中的I是integrated)。

acme出自贝尔实验室的plan9操作系统,由rob pike设计。说到plan9,多扯几句闲话。我最早接触过plan9系统还是在使用emacs之前。装虚拟机进去看了一圈,发现什么都没有,什么都干不了。鼠标手势很奇怪,这是一个跟我接触过的linux/window之类的完全不一样的东西,我立马被吓坏了。

直到后来接触了emacs,接触了lisp。忘记是哪篇文章上看到的,对我感触挺深。作者原以为所有编程语言都一样的,抱着这种心态去看了下lisp,然后被括号给吓坏了。但是有那么多牛人都高度赞扬它,lisp一定有某种神奇的魔法,作者不能容忍自己对此的无知。直到突然顿悟的那一天,他感觉到了lisp神圣的光芒,他要把他的感受告诉周围的人,让至少100个迷失的灵魂得到救赎......这正是我写这篇文章的用意:布道。

acme是一个编辑器

鼠标手势

是这个编辑器很与众不同的地方。acme大量地使用鼠标。也许emace/vi的键盘党会对此很不屑,但其实使用鼠标是很高效的。就像用过vi的人才会发觉,编辑模式使用是远低于普通模式的,大部分的需求是移动光标,vi可以让你打字如飞。用过emacs的人才会发现,其实vi中的打字如飞,大多都是废操作,在emacs中敲一个键就可以抵N个键。而用过acme的人,才知道原来鼠标可以玩出这么多花样了,让你的效率指数暴表!

使用acme需要一个三键鼠标。左键拖拽是选择;左键拖拽不放手,再点击中键是剪切;左键拖拽不放手,再点击右键是粘贴;剪切再粘贴,就是复制了。右键用于跳转和搜索,选中一个词再点右键会在文本中搜索这个词,跳到它下个出现的位置。还有很多有用的鼠标操作组合,可以自己去发觉。

命令语言

acme中的编辑是通过命令语言实现的。acme和vi的起源,都是ed。ed是使用命令语言的。你现在还可以在vi的命令模式中还可以看到ed的影子,比如使用%s/old/replace/g进行替换就是一条命令语言。vi做的事情,是把命令语言敲的东西所见即所得化了,所见即所得是好的,但是代价编程功能–原本命令是可以组装写成脚本的。与vi不同,acme继承了ed的命令语言方式。

  • 用右键选择:$ 跳转到文本末尾
  • 到开头是:0,到第n行就是:n
  • :3-+#8 跳到行3行8列
  • :3,9 选中第3到9行
  • :/func/,/}/ 选择以func开头,以}结尾的一段,也就是选择Go中的一个函数
  • Edit ,x/old/ c/new/ 中键选择命令,将单词old全部替换成new

更多的资料可以去查一下sam,在acme中使用的命令语言跟sam是基本一致的。

acme是一个IDE

acme是一个最小化的集成开发环境。传统的IDE是一个封闭系统,通过各种插件来扩展,而acme是一个粘合剂,它通过管道调用各种unix小工具。所以IDE中的I是integrated,而acme是integrating的。

它是一个窗口管理器,如果你使用过平铺式窗口管理器,对它的界面应该会感到亲切。

Acme.png

当然,它是一个shell,你可以中键点击win打开一个shell窗口,在里面执行你想要的各种命令。

你可以在acme里面完成写代码/编辑/调试全部的过程...但是还有更强大的。在acme中可以收发邮件/浏览网页/打开pdf/浏览图片等等。一切只需轻轻一点:

mailto:[email protected] 在acme中对这段文字右键点击会调用默认的邮件工具发送邮件。

http://www.zenlife.tk 右键点击会使用浏览器打开网页。

/Users/geius/Documents/acme.pdf 右击会调用pdf阅读器打开文件

acme(1) 右击会调用man查看命令的使用帮助。

右键点击是跳转,中键点击是执行。比如你还可以这么玩:输入date,中键点击,它会执行date命令。同样,你可以在tag中加入一个make,执行命令编译工程。

中键点击不放,再点左键,是以选中的文字作为参数调用命令。比如选择文字hello world,然后中键左键echo就相当于执行echo 'hello world'。

acme完美地将窗口管理器/编辑器/shell所做的事情结合了起来。除了煮咖啡,acme无所不能(我没有黑某个号称可以煮咖啡的工具)。

acme是失落的黑魔法

unix哲学

既然说到emacs,就不得不提一下这两种哲学。大家都知道,emacs背后是lisp的那一套,如果你读过unix痛恨者手册就会知道,那是一个百家争鸣的时代,主要有三种思想:lisp的,unix的,GUI的。lisp机以失败告终,emacs作为一个一致的lisp环境,算是硕果仅存了,它是一个伪装成操作系统的编辑器。

lisp中有很多好的思想,emacs利用lisp这层中间层语言达到完全可扩展的目的。语言/编辑器/操作系统是和谐统一的界面。还是有人会怀念那个时代,Oberon操作系统是个很牛B的东西,可惜都没人听过。lisp已死,lisp永生。

unix哲学是另一套,不是lisp所追求的一门语言就是一个操作系统,通过函数调用就可以完成进程间通信。unix哲学的核心几条,像KISS这种。每个小工具只做一件事件,并将这件事情做到极致。工具间通过shell管道进行组合,就可以发挥出无穷的威力。

但是emacs确实很强大,不是么?所以rob pike抄袭了Oberon的设计,达到跟emacs同样强大的功能,但是按unix哲学而不是lisp哲学实现,于是便有了acme。

说到抄袭,GUI无疑是赢得了大多数用户,它胜出核心是什么?鼠标!假如没有鼠标还有能GUI吗?而acme中也是强调使用鼠标的。acme正是一个集众家所长的工具。

一切皆文件

一切皆文件是unix哲学,在plan9操作中得到了完全贯彻。acme正是起源于plan9。进程间通过文件进行通信,这是一套非常高端的思想。因为文件通信是语言无关的,所以你可以用任何自己熟习的语言扩展acme,无论是shell/python/c/go等等。

比如说你可以

9 mount namespace/acme /mnt/acme

然后你编辑/mnt/acme/1/body就可以改变acme里面的文件内容。比如你在编辑Go代码,就可以使用go fmt读入此文件并写回。

再比如说你要类似执行程序的init文件,只需要修改mount的那个文件,就会实时地反映到程序上,不需要重启程序。

也许你想到了linux的/proc系统,其实/proc就是抄的plan9。

一切皆文件,那么acme的内存空间就可被mount到一个文件上,其它程序通过读写这个文件就可以和acme进行通信!

超链接的魔法

前面说过右键点击是跳转。跳到某个文本的某一行,跳到man手册,跳到浏览器打开某个链接,打开pdf文件等等。是不是很类似"超链接"的感觉?这一切都是通过一个叫做plumb的文件服务实现的。

实现超链接的魔法的基础是一切皆文件。plumb是一个类似订阅/分发的服务,它会mount出一系列的文件。分发者通过读/写文件的方式发出事件,而订阅者也是通过读写文件的方式接受并处理事件。

plumb中有一套规则语言,用于指定分发/订阅的转发规则。比如当我们右击acme(1),后面有一套规则是调用man 1 acme命令,然后将输出写到/mnt/plumb/edit中,而acme是edit文件的订阅者,它将数据从edit中读出并显示。跳转到某一行也是类似的规则。

而打开链接的过程是这样的,plumb中有一条规则是处理http,它将请求转到/mnt/plumb/web中,而浏览器,比如说chrome是/mnt/plumb/web的订阅者,那么它会读取请求的http网址并打开。acme的超链接魔法,只是将右键点击的内容,发送给plumb服务,由plumb决定如何处理和转发。

acme是失落的黑魔法,它里面有很多你从来没见过的神奇的东西。它是rob pike,russ cox这些大牛使用的工具。跟着大牛走,使用大牛们使用的东西,学习大牛们的思维方式,让自己也成为大牛。

vi与emacs之争,IDE与编辑器之争,GUI与命令行之争,这都是持续了不知道多少年的话题。都接触过之后才不至于偏激。如果你倦了,不妨试试acme,也许它才是你要的答案。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK