福利了! 想在配置远程 VPS 的时候(或在 docker 环境中)使用 Emacs吗? 现在终于有了一个完美的方案

我想只要是程序员或 DevOps 一定遇到过这样的需求, 例如, 在远程 linux 主机(或 Docker)内操作, 常常需要编辑一些东西, 很希望使用自己习惯的编辑器和键位来编辑, 当然, 如果你远程主机用 VI, 本地用 emacs, 那么这个好消息对你来说不算什么, 但是如果你是我这种, 服务器用 nano 凑合的人, 那么就这就是一个很大的福音.

https://gitlab.com/craigbarnes/dte 这是当年的 dex 编辑器的涅磐重生.

这里只列出一些它最强大的一些地方:

  1. 所有快捷键都可以定制, 做到这点真不容易!
  2. 代码高亮支持, 类似于 Ubuntu 下的 nano.
  3. 即使在远程主机上运行编辑器, 也可以直接和本地的 clipboard 进行交互. (见这个 issue. https://gitlab.com/craigbarnes/dte/-/issues/117) 事实上, 你可以设置不同的快捷键, 分别拷贝到 clipboard 或 primary, 然后选择从不同的地方粘贴.如果你不了解这个功能的痛点, 那么也许你没有这个需求, 可以直接跳过. 不过对于有兴趣了解的, 见这个 reply
  4. 支持 Emacs 熟悉的命令模式, 即: M-x

总之, 这是目前我知道的纯命令行下操作的定制性最好, 而且非常现代化的编辑器, 没有之一.

也是因为个人太兴奋了, 专门创建了一个小项目, 用来将 任意的可以执行文件,以及相关的依赖文件打包成一个单文件版本, 如果你现在就想体验, 可以直接访问 package_payload 查看.

这是一个已经打包成单文件的 dte binary, 你可以下载下来, 拷贝到你的远程服务器上,或 docker 里面把玩. 顺便提一句, 这就是一个纯 bash shell 文本格式脚本, 如果你想配置自己的快捷键, 自己修改 dte 的 配置文件, 然后参照 README.md 打包就可以了.

EDIT on 2021/04/26

package_payload 新增了一个 sample, 叫做 docker_bash (原谅我对英文单词的匮乏), 我想这个包可以更清楚表述 dte 以及 package_payload 的使用场景.

简单介绍下, 就是打包了一个单文件版本的 bash shell 脚本, 叫做: docker_bash 你可以这样和 docker 交互:

- docker_bash a_docker_image
- docker_bash a_existing_container
- docker_bash a_failed_container
- docker_bash a_docker_volume

以上四种方式, 都会在容器中启动一个交互的 bash shell, 并且, 你可以直接使用 dte 编辑器来编辑 docker 里面的文件, 我觉得对于经常和 docker 打交道的人来说很方便, 你认为呢?

3赞

看不懂,内容跟标题啥关系

tramp 干的不就是这事吗

1赞

看着和emacs没啥关系,我误以为是在docker中使用emacs呢

不试试怎么知道不像 Emacs ?

不像 Emacs.

而且配置文件也不是lisp的,有种tmux.conf的味道.

我觉得蛮像内置包也没咋用的emacs

对习惯emacs键位的人蛮舒服的(我选vi(逃)


粘贴板交互挺好,

不过我觉得标题应该改一改

操作方式完全复制 emacs, 而且, 最重要的是, 在 ssh 登录到远程主机的情况下, 支持和本地的剪贴板交互, 这点感觉最强大.

ssh 登录远程主机, 你用 VI, 可以和本地系统的剪贴板进行交互吗?

1赞

仅从你的描述上来说,好像是个简化版的 emacs tramp

远程访问本地剪切板这个功能其实需求不大吧。

短一点的拿tmux或者screen就可以复制到本地, 长一点的直接sftp或者sz rz了.

还是得吐槽一下标题,腾讯新闻小编直呼内行

太好了,感觉emacs只适合图形界面下使用,如果dte能把dired,hydra,ivy,counsel这些都实现了就更棒了

你想多了, 能够快捷键 100% 和 Emacs 兼容, 就很不错了, 能做到这点的, 我就发现这一个.

emacs终端用也很好呀

emacs不是更适合终端下使用吗?正好说反了吧

刚刚更新了 package_payload, 新增了一个 docker_bash 脚本, 我想这个可以更清楚表述 dte 的使用场景.

有个问题,如果说这个东西不是发行版自带,也要安装的话,为什么不装 emacs,那不是更像吗?如果只是为了个剪贴板,感觉很没有必要。

1赞

现在新用户, 基本上都是工作在 X 模式下吧, 发行版装个 emacs, pull 一堆依赖不说, 而且很多按键绑定和 X 下使用 Emacs 不兼容. 而且, 就算发布版装了, 是不是还得自己上传自己的配置文件? 最后, 我不是提供了一个小项目, 专门用来安装 portable 的 dte 了嘛, 单文件版本, 包括你所有的配置, 全部打包在一起.

剪贴板只是红利, 虽然的确支持这个 feature 的命令行编辑器的确不多, 但是, 有这个 feature, 才是 Emacs, 例如, 你在 dte 里面, Ctrl+2, set-mark, 然后选择一个 selection, 当你想复制选区内容的时候, 你一定想只复制选中的内容, 对吧?(就像我们 Emacs 中通常做的那样), dte 可以啊. 换其他编辑器, 例如 micro, 你还得用鼠标重新将之前的选区再选一次, 再 CTRL+SHIFT+V, 而且, 别忘了, 选择超过一页的内容, 你咋搞?

社区不知道有没有类似vscode remote的方案?

我不是这样看这个问题的,首先发行版装 emacs 是很容易,拉配置也很容易。

sudo apt install emacs
git clone xxxxx ~/.emacs.d

这两行没有啥成本。而如果是为了像 emacs 用其它编辑器,那没有的功能要怎么办?如果只是为了找个远程使用的编辑器,到还可以理解。