代码分享:在 Eshell 实现 fzf 般查找历史命令

FantasqueSansMono

1 个赞

这种通篇全是“畅想”,没有实操,罔顾实际使用体验的文章,还是少看为妙。

1 个赞

预告:之前想介绍下 neovim 的内嵌终端,不过拖延症犯了,一直到现在还是 draft 状态。。。

我今明两天尽快把文章写完发出来 =՞ェ ՞=

那个看起来像是terminal emulator,在Emacs中对应应该是term/ansi-term/emacs-libvterm(3rd-party). 目前来看,功能比较完善的是emacs-libvterm,缺陷是性能不及native。而term/ansi-term对一些复杂的显示的处理还不够好。

对的 就是基于 libvterm 的终端模拟器。 emacs 里能跑起来么?

你说的 term/ansi-term/emacs-libvterm(3rd-party) 在哪?

term 和 ansi-term 是自带的。 emacs-libvterm: GitHub - akermu/emacs-libvterm: Emacs libvterm integration

建议你看看 http://ergoemacs.org/emacs/emacs_shell_vs_term_vs_ansi-term_vs_eshell.html

Emacs 本身就是终端吧,在它上面运行 eshell,就跟在 Terminal.app 上运行 bash/zsh/fish 是一个道理。

不能煮咖啡的编辑器不是好终端。

嗯 我也刚搜到你链接的这个了。第三方的,看上去还不太成熟。

如果真能搞好,就可以和 neovim 的内嵌终端一较高低了。

好吧,eshell 算 shell,neovim 内嵌终端则是 terminal emulator。

然而,这都不是重点。我们关心的是哪个好用些。

改了一下

(defun my/ivy-eshell-history ()
  (interactive)
  (require 'em-hist)
  (let* ((start-pos (save-excursion (eshell-bol) (point)))
         (end-pos (point))
         (input (buffer-substring-no-properties start-pos end-pos))
         (command (ivy-read "Command: "
                            (delete-dups
                             (when (> (ring-size eshell-history-ring) 0)
                               (ring-elements eshell-history-ring)))
                            :initial-input input)))
    (setf (buffer-substring start-pos end-pos) command)
    (end-of-line)))
1 个赞