kee*_*eda 66 emacs shell elisp
在emacs中使用shell时是否有内置命令来清除shell?
如果没有,是否有一个elisp函数来实现相同的功能?
Tyl*_*ler 86
刚刚注意到Emacs现在(版本25+)具有默认comint-clear-buffer绑定的命令,C-c M-o它可以完成我们需要的操作,并且可能比我最初在下面发布的答案更可取.
C-l将重新进入缓冲区.按下它会重复循环缓冲区,使该点出现在缓冲区的顶部,中间或底部.当它停在顶部时,缓冲区看起来已被清除,尽管所有文本仍在那里,不在视野范围内.
C-x h标记整个缓冲区,然后C-w杀死它.这也会杀死最后一个提示,但在您输入下一个命令后,您会收到提示.
你也可以使用erase-buffer,默认情况下没有绑定到键,但它很容易完成(你也可以使用M-x erase-buffer:
(defun my-shell-hook ()
(local-set-key "\C-cl" 'erase-buffer))
(add-hook 'shell-mode-hook 'my-shell-hook)
Run Code Online (Sandbox Code Playgroud)
这与它有关C-c l; 你可以选择你喜欢的.
(defun my-clear ()
(interactive)
(erase-buffer)
(comint-send-input))
(defun my-shell-hook ()
(local-set-key "\C-cl" 'my-clear))
(add-hook 'shell-mode-hook 'my-shell-hook)
Run Code Online (Sandbox Code Playgroud)
在您使用emacs一段时间后,标记和查杀区域变得很自然,因此您可能会发现第一个选项就足够了.如果没有,最后一个选项最接近你想要的.
编辑:刚刚在emacs wiki上找到了这个,它比我的选项4更好:
(defun my-clear ()
(interactive)
(let ((comint-buffer-maximum-size 0))
(comint-truncate-buffer)))
Run Code Online (Sandbox Code Playgroud)
ant*_*nio 27
这里提出的大多数解决方案都不适用于EShell模式!
EShell模式缓冲区是只读的,因此kill和erase命令不起作用.
要使用普通的Ctrl- L清除eshell终端,请将其添加到您的.init文件中:
(defun eshell-clear-buffer ()
"Clear terminal"
(interactive)
(let ((inhibit-read-only t))
(erase-buffer)
(eshell-send-input)))
(add-hook 'eshell-mode-hook
'(lambda()
(local-set-key (kbd "C-l") 'eshell-clear-buffer)))
Run Code Online (Sandbox Code Playgroud)
注意:为了更好地模拟标准Ctrl- L在清除缓冲区后,该命令将恢复初始提示.
Pau*_*aul 15
点击*shell*缓冲区,运行:
C-c M-o
要么
M-x comint-clear-buffer
注意:这也适用于*Python*shell,但似乎不起作用*eshell*.
当你开始使用Mx shell时AFAIK你无法清除,但是如果你做Mx术语,你会得到一个功能齐全的终端,其中clear可以按照预期工作.我可能在这方面有误,但我个人现在使用Mx术语,因为它完全正常运行.