自动关闭emacs shell模式tab-completion缓冲区?

这让我疯狂了很久,我想知道是否有办法解决它?希望我可以很好的形容情况.

为了简单起见,说我有以下目录结构:〜jer / dirA和〜jer / dirB

在emacs内的shell中,我从我的顶级目录(〜jer)开始,键入’cd dir’,然后点击tab.

我的窗口分为2,我有一个*达成*缓冲区.这很酷;我看到我的选择是’dirA’和’dirB’,我键入一个’A'(所以我的完整命令是’cd dirA’),然后按回车键,但*达成*缓冲区保持打开,我必须手动关闭它(通常使用’Cx 1′,因为我在我要保存的shell缓冲区中,但是如果我已经有一个分割窗口,这更令人讨厌,因为* Completions *缓冲区取代了另一个已经在那里,我必须切换到那个,并按Cx k手动杀死它).

所以我的问题是:一旦完成我的命令,有没有办法使* Completions *自动死机?在上面的例子中,一键输入’cd DirA’后,我打算输入缓冲区即可.

谢谢,我希望这是有道理的.注意,我不认为这是Is there any way to automatically close filename completetion buffers in Emacs?的重复,因为这是关于使用find-file(在这种情况下* * Completions *缓冲区关闭.

我想这正是你想要的.
每次输入命令时都会执行delete-completion-window-buffer功能.它找到所有当前窗口,并从中获取缓冲区.检查缓冲区的名称是否“* Completions *”,缓冲区让你生气,如果是这样杀死缓冲区并删除相应的窗口.
最后,它将输出字符串传递给您的下一个钩子comint-preoutput-filter-functions.
为什么有输出参数?请参阅comint-preoutput-filter-functions的文档.最好在那里解释
(defun delete-completion-window-buffer (&optional output)                                                                
  (interactive)                                                                                                
  (dolist (win (window-list))                                                                                  
    (when (string= (buffer-name (window-buffer win)) "*Completions*")                                          
      (delete-window win)                                                                                      
      (kill-buffer "*Completions*")))                                                                          
  output)                                                                                                      

(add-hook 'comint-preoutput-filter-functions 'delete-completion-window-buffer)

但是,实际上,完成缓冲区不会给我很多困扰.令人困扰的是,这个命令是“清除”的
工作得很好为了解决你的问题我goolge shell模式,没有什么.
但是我有一个解决我的问题EmacsWiki.

(defun clear-shell ()                                                                                          
  (interactive)                                                                                                
  (let ((comint-buffer-maximum-size 0))                                                                        
    (comint-truncate-buffer)))                                                                                 

(define-key shell-mode-map (kbd "C-l") 'clear-shell)

我绑定到Ctrl-L,正常的终端绑定.尼斯代码希望你喜欢!

相关文章

普通模式 >G 增加当前行到文档末尾处的缩紧层级 $ 移动到本行的末尾 . 相当于一个...
原文连接: https://spacevim.org/cn/layers/lang/elixir/ 模块简介 功能特性 启用模块 快捷键 语言专属...
原文连接: https://spacevim.org/cn/layers/lang/dart/ 模块简介 功能特性 依赖安装及启用模块 启用模...
 =   赋值操作符,可以用于算术和字符串赋值 +        加法计算     -        减法运算...
1.根据包名来查看指定的APP指定数据 adb shell "top | grep com.xxx.xxx" 由于这样打印出来的数...
ctrl+F 向下翻页 ctrl+B 向下翻页 u 取消最近一次操作 U 取消当前行的操作 ZZ 保存当前内容并退出 gg 跳...