开放性议题:各位Emacs党为什么没跳出神之编辑器这个坑


#83

写得不错,我顶你。相信你会喜欢上emacs。最后一句,试试centaur emacs 吧,哈哈😄


#84

心流不是专注力,但可以简单理解为专注的状态吧(比较严谨的定义请参考维基百科, 或者《心流》原著)。

进入并保持心流,既是一个人的能力,也受外界因素影响。所以才会有人买 noise cancelling 耳机,John Carmack 才会去 coding retreat…… => 这都是在『降低外界因素打断心流』的可能性。

编辑器也是外界因素的一种,比较理想的状态下,我们的思考可以迅速转换为文字或者代码,从而把打断心流的可能性降到最低。

通过观察自己,再加上小规模抽样调查,发现『手在鼠标和键盘间切换,会打断心流』,然后已知『进入心流状态时,编程效率最高』和『打断后再想进入心流状态,会比较花时间』,以及『无法只靠鼠标编程』的常识,自然就能推论出『常用的工具最好可以全键盘操作』啊。

作为一个软件开发者,至少需要在浏览器和编辑器之间切换…浏览器鼠标操作无法避免

=> Firefox + surfingkeys (version 48 之前还可以用 moz-controller 在 Emacs 控制 firefox,再加上 keysnail,体验很好,近期的话,打算试试 eaf)

换成在mbp上,所有工具上的操作都可以在“全键盘”上高效完成。

=> 1, 对我而言,mbp 不符合『长生久视』的第一条第三点;2, 如果你是说键盘+trackpad 的“全键盘”用法的话,应该比鼠标会好一些(从不打断心流的角度讲),但 a. 我对键盘有要求,通常用外接的,所以没有 trackpad,b. 即便用 mbp 原生键盘,trackpad 偶尔会因为误触而打断当前工作,所以我通常都是 disable 掉的

现在觉得 用户体验好和专业、高效才是好的工具。

每个人对工具“能够做什么”和要的结果都不一样的,没有必要纠结这些。

反过来想,当初开始学Emacs, 没及时发现投入成本大于收益,太固执于现在的方案却不思考其他方法,才对Emacs有些抱怨。

=> 同意,不过对我而言,Emacs 就是『综合用户体验最好+最高效+未来预期最高』的工具啊,所以继续用,这个是回答『各位Emacs党为什么没跳出神之编辑器这个坑』。至于为什么,我最开始那个回复应该已经说明白了。

一点儿题外话,即便对于『把编程当作长久事业的人』的人,我都不觉得非得遵循『长生久视』的策略,这最多只是提供一个相对优势而已,最终的水平和成就,有好些其他更重要的因素 => 比如,我用 Emacs (Firefox + GhostText)写博客、发贴子、回贴子,效率比在浏览器里高很多,也比用 Word 高很多,但刘慈欣用 Word 写出的小说,我(大概率)一辈子也赶不上。所以如果楼主看明白了上面大家的分析,这很好,在心里有了个 index,但依然想换用其他工具,也完全没必要纠结:以后或者开开心心地用新工具,或者哪天又突然回来用 Emacs 了 (因为有了 index 所以概率更高了一点儿)。


#85

比较认同wenno的从哲学角度的论证,单说某个插件,即便是magit、org-mode、gnus这种杀手级应用,它们也并不一定比对应的专门git工具/笔记工具/email软件好用。

但是在emacs积累的知识,引入新插件后大多还适用,配置好了flyspell-mode,magit、org-mode、gnus里都可以直接M-x flyspell-mode,所以长期累积下来,优势就明显了,而且会越滚越大。

比如最近看电子书,本来是用calibre,边看书边试代码,需要在emacs和calibre间不停切换,麻烦。后来发现了emacs nav.el,直接在emacs中打开epub,浏览体验不错(但应该比不上calibre),之前学会的各种emacs功能:ace-jump、拼音搜索、send-code-to-buffer,都可以用,那叫一个爽!


#86

想请教一下:在Emacs里控制Firefox是什么意思?

是在Emacs里直接调用一个浏览器内核然后渲染在Buffer上?还是外部控制另一个Firefox应用程序?

另外,我看很多人看pdf也在Emacs里,比如:

他们是在Emacs里装了一个pdf解析器和渲染器吗?

这样把Emacs当成操作系统来用会不会很危险,。。。毕竟Emacs不是操作系统,没有进程隔离之类的机制,比如:如果Emacs挂掉,岂不是之前启动了一半的程序都会挂掉,导致数据损失?(比如:笔记之类的)


#87

我不太了解,但印象中通常是开一个相关应用程序的新进程,然后通过某种方式跟这个进程交互,所以也就不太存在“进程隔离”的问题?我经验尚浅,还没碰到过开什么东西导致Emacs挂掉的情况,你有遇到过吗?笔记之类的可以试试自动保存功能。

我不喜欢PDF,所以也不怎么看,电子书如果只有PDF格式,可以用Calibre转化成其他格式(比如epub)。


#88

pdf用 pdf-tools,epub 用 nov-mode。 pdf-tools是单独有个进程处理,emacs 只做转换后的展示。


#89

我以前自己写的一个插件,通过跟 mozrepl (Firefox 的一个插件,48之后的用不了)交互从而在 Emacs 里操作 Firefox,不是渲染。应用场景是边用 Firefox 读文档边写代码,可以不用切来切去的。https://github.com/RenWenshan/emacs-moz-controller


#90

能具体说一下emacs 在remote server上的配置吗? 例如远程python 补全,是否使用tramp之类的?


#91

python补全我用的jedi.el,因为比较跟手,定义跳转也比较好用。我也用过eglot(用久了老崩溃,但是速度还行)和anaconda(速度太慢了不跟手),最后还是觉得jedi.el好用。

tramp我不用,因为是直接ssh到服务器上用emacsclient。

不知道你还有哪些方面想知道呢?


#93

我python补全用的是anaconda,如果使用tramp修改远程代码的话,补全就会停止工作… 所以你修改code是在本地,然后只是使用eshell代替screen 在远程跑程序是吗? 那样的话对我帮助就不是很大了… 因为我在组内经常需要登录到有空GPU的服务器跑程序,这样的话可能要开很多个eshell,感觉管理起来很麻烦…


#94

我并非使用tramp。这么说吧,我从来不用GUI Emacs,我是直接使用SSH登录到远程服务器上,在远程服务器上使用terminal emacs。也就是说,我编辑代码在远端,跑程序也是用eshell挂在远端。本地的话只是开一个终端模拟器来运行ssh而已。

事实上你说的这种情况和我完全一样。我也的确需要开多个eshell。不过我并不认为管理起来很复杂,恰恰相反,我觉得开多个eshell是一个优势,就像你可以开多个tmux、GNU Screen窗口一样。我不知道你说的“管理麻烦”具体是指什么,是指多个 eshell之间互相切换复杂吗?要解决这个问题你可能需要写几行elisp代码:

  1. 让eshell可以实现多开。我没记错的话emacs的默认的behavior是:当你第二次执行M-x eshell时,emacs会切换到你最初打开的那个eshell buffer。但是最理想的behavior应该是每次 M-x eshell,都会创建一个新的eshell。用C-u <num>的形式又比较繁琐。因此你需要一个计数器来帮助你实现eshell多开。
  2. 用简单的快捷键(比如 C-nC-p),实现eshell窗口的跳转。

我自己通过elisp实现了上述的两个主要功能,但是我觉得代码有点丑(一年前刚入门elisp的时候写的),就甭放上来了……

既然你提到了用emacs管理后台程序太繁琐,那么请问你是如何跑后台程序的呢?你觉得你现在的方法管理后台程序不繁琐吗?


#95

我用的是笔记本,所以如果我在实验室开一个eshell跑实验,然后带着它去教室上课,网络会断开,当我再次回到实验室的时侯,这个时侯eshell该怎么重新连接到之前跑的程序呢?


#96

@Saltychtao 用tmux打开emacs


#97
  1. 在实验室的服务器里,用运行emacs --daemon,这样会启动一个emacs server,emacs会在后台运行,而且当你退出服务器或者断网之后,emacs也不会断掉,会始终在后台运行。
  2. emacsclient -t打开一个emacs客户端,这个客户端会连入你之前在后台运行的emacs server。然后你就在这里运行M-x eshell,打开一个eshell,然后在里面运行你的模型python yourmodel.py。进行到这一步之后,你可以自由地退出emacs(只要别kill掉server),哪怕你就地断电断网,你的模型都不会挂掉,它会始终在后台运行
  3. 等你想回来看结果的时候再重复步骤2即可。

总之我的emacs server一般会在服务器上连续运行两个月,只要不出bug我都不会重启emacs。


#98

完全没有必要。用emacs --daemon + emacsclient 就可以实现断线不退出。


#99

怎么在论坛里看到好多搞AI的呀,是AI + Emacs更配吗?


#100

nohup python test.pt &


#101

这个做标准能刷掉不少的…


#102

学到了,谢谢! 请问这样运行的程序可以重入吗?比如如果你的test.pt是一个交互性程序,需要在程序运行中输入指令?


#103

功能够多够灵活,但是要说没有卡顿我是不认的,性能其实是个问题