2 个赞
In this article, I’d like to argue that Emacs largely follows the Unix philosophy in its problem domain: working with text , and can be seen as a two dimentional version of the command-line interface.
有什么收获分享一下?
初读的时候,个人觉得 2D 这个概念是比较新颖的。
$ echo "hi" | grep "hi"
如果用任何一个编辑工具,都可以写成下面的形式,但得到相同的结果。
echo "hi" > tmp.log
grep "hi" tmp.log
用 Elisp 写成的程序, 比如下面这个 2D 程序:
(defun open-line (n)
(interactive "*p")
(let* ((do-fill-prefix (and fill-prefix (bolp)))
(do-left-margin (and (bolp) (> (current-left-margin) 0)))
(loc (point-marker))
(abbrev-mode nil))
(newline n)
(goto-char loc)
(while (> n 0)
(cond ((bolp)
(if do-left-margin (indent-to (current-left-margin)))
(if do-fill-prefix (insert-and-inherit fill-prefix))))
(forward-line 1)
(setq n (1- n)))
(goto-char loc)
(end-of-line)))
执行起来和下面这个 1D 程序,所达到效果和性能完全一致。
(defun open-line (n) (interactive "*p") (let* ((do-fill-prefix (and fill-prefix (bolp))) (do-left-margin (and (bolp) (> (current-left-margin) 0))) (loc (point-marker)) (abbrev-mode nil)) (newline n) (goto-char loc) (while (> n 0) (cond ((bolp) (if do-left-margin (indent-to (current-left-margin))) (if do-fill-prefix (insert-and-inherit fill-prefix)))) (forward-line 1) (setq n (1- n))) (goto-char loc) (end-of-line)))
或者是想表达这样一种效果?
- Emacs is the 2D Command-line Interface
- Vim is the 2D Command-line Interface
在 EmacsTalk 昨天发布的最新一期节目 里,嘉宾也提到了 2D 这个概念。
现在再回过头来看这篇文章,这里说的 2D,应该主要是指『结构化数据』,相比 grep 之类面向行的命令行工具,Emacs 通过 Lisp 可以用来把一维的文本,转化为二维的结构化数据,直观来说就是各种编程语言的 major-mode,使得用户可以按照语义块来操作文本。
6 个赞
建议是个好建议,就是实施难度比较大。
现在字幕倒是有,腾讯会议能自动生成,跳转按说应该也支持,但没研究过,等后面人手多了再考虑吧,光是目前这样已经让我满 cpu 运行了。