我的主力Shell 一直是Eshell, 因为我的系统包括Windows/Linux/Mac, 我需要一个跨平台shell
資源:
- Master Emacs 的master eshell
- Reddit 上面關於的帖子
- Youtube 的介紹
https://www.reddit.com/r/emacs/comments/6y3q4k/yes_eshell_is_my_main_shell/
https://www.reddit.com/r/emacs/comments/5qh2sd/using_emacs_27_shell_and_eshell/
插件:
我的配置:
我之前发过关于Eshell 的帖子:
截图:
特性:
- 类似fish 的补全
- 与Emacs 的完美结合
- 跨平台
- 可以使用shell 或者lisp 的语法来编写eshell 脚本
- 具备主流shell(如bash) 大部分功能
不足:
- 不支持输入的重定向
- 对top 这些强交互命令支持不好
- 缺乏文档
话说,为什么有点链接没有实现缩略图详情的
补充:附加一些我自己日常的Eshell 玩法,之前回帖的时候没有想起来,现在用到又想起来了
- 在
Eshell
执行着命令,例如ls/cd
等,然后突然想打开某个文件,可以直接在Eshell 使用Emacs 打开目录或者文件,而不需要再在编辑区使用C-x C-f
打开文件。
比如我在Eshell
窗口 用 cargo new
命令新建了一个Rust 项目了,然后在另外一个打开这个目录/文件。
因为我经常用到dired-other-window
和 find-file-other-window
, 我就直接用shell 的形式建了alias:
alias fow "find-file-other-window $1"
alias dow "dired-other-window $1"
意义重大的是:这样就可以将Emacs 的函数当作shell 命令来玩,使Eshell 的shell命令集数量大大增加. @MaskRay
再补充: Eshell 虽说不支持输入重定向,但是Eshell 支持重定向到Emacs, 比如文件,缓冲区,甚至变量:
- 重定向到
*scratch*
缓冲区
cat mylog.log >> #<buffer *scratch*>
- 重定向到变量 (这个真的丧心病狂了)