emacsm-xshell和bash键盘绑定的重写

emacsm-xshell和bash键盘绑定的重写,bash,emacs,Bash,Emacs,如果我理解正确,在M-xshell下运行bash时,Emacs会覆盖一些bash键盘绑定,并且会使一些bash命令和功能无法像“native bash”中那样工作(例如,请参见线程) 我在bash中经常使用的命令之一是(默认情况下绑定到Ctrl-l) 有没有一种简单的方法可以让Emacs在shell模式下重现相同的行为,这样我就可以在Emacs中清除bash屏幕 我知道我总是可以使用M-x术语来获得一个真正的终端,但我想为M-x shell 编辑:当我键入C-l C-l时,Emacs将当前行移动

如果我理解正确,在
M-xshell
下运行bash时,Emacs会覆盖一些bash键盘绑定,并且会使一些bash命令和功能无法像“native bash”中那样工作(例如,请参见线程)

我在bash中经常使用的命令之一是(默认情况下绑定到
Ctrl-l

有没有一种简单的方法可以让Emacs在
shell模式下重现相同的行为
,这样我就可以在Emacs中清除bash屏幕

我知道我总是可以使用
M-x术语
来获得一个真正的终端,但我想为
M-x shell

编辑:当我键入
C-l C-l
时,Emacs将当前行移动到窗口顶部,但只要我在bash中输入新命令,窗口就会再次滚动到原始位置

谢谢

只要键入M->转到缓冲区的底部(如果需要),然后C-l C-l将当前行移动到窗口的顶部。看起来你已经清除了屏幕,但是所有被删除的内容仍然显示在窗口顶部上方

编辑:

要防止Emacs像您描述的那样滚动窗口,请将其放入
.Emacs
文件中:

(remove-hook 'comint-output-filter-functions
             'comint-postoutput-scroll-to-bottom)
我发现这种行为也很烦人。

只要键入M->转到缓冲区的底部(如果需要),然后C-l C-l将当前行移动到窗口的顶部。看起来你已经清除了屏幕,但是所有被删除的内容仍然显示在窗口顶部上方

编辑:

要防止Emacs像您描述的那样滚动窗口,请将其放入
.Emacs
文件中:

(remove-hook 'comint-output-filter-functions
             'comint-postoutput-scroll-to-bottom)
我发现这种行为也很烦人。

您可以在shell模式下重新绑定C-l,使其以您想要的方式运行:

(define-key shell-mode-map (kbd "C-l")
  (lambda ()
    (interactive)
    (previous-line)
    (end-of-line)
    (let ((start (point))
          (end (goto-char (point-min))))
      (delete-region start end)
      (kill-line)
      (end-of-buffer))))
您可以在shell模式下重新绑定C-l,使其以您想要的方式运行:

(define-key shell-mode-map (kbd "C-l")
  (lambda ()
    (interactive)
    (previous-line)
    (end-of-line)
    (let ((start (point))
          (end (goto-char (point-min))))
      (delete-region start end)
      (kill-line)
      (end-of-buffer))))

这不管用。我之前试过(我会在帖子中澄清)
C-l C-l
将当前行移动到窗口顶部,但我在bash中输入命令后,窗口将再次移动到原始位置。顺便问一下,您是否介意描述上面的代码?这不起作用。我之前试过(我会在帖子中澄清)
C-l C-l
将当前行移动到窗口顶部,但我在bash中输入命令后,窗口将再次移动到原始位置。顺便问一下,您是否介意描述上面的代码的作用?