防止打开不必要的缓冲区


18

我使用emacs进行日常JavaScript编辑,以便在缓冲区之间切换(使用Cx LEFT和Cx RIGHT),我对此表示满意(即使我很难知道要修改的文件的路径)。

我的问题:

  1. 在我一直拥有*scratch**Messages*开业的公司中,我认为放入(kill-buffer "*scratch*").emacs可以解决问题,但事实并非如此,您有什么建议吗?

  2. 当我打开文件时,我总是执行TAB自动完成功能,因此,每次创建*Messages*包含完成选项的新缓冲区时,如何阻止创建,或更佳的是,如何使emacs杀死它?做出了我的选择?

如果您认为我正在做的事情不是我应该按照顶部所说的那样进行,那请说出您的意见。


1
您可能想要探索其他方法,如Trey所建议的那样切换缓冲区。如果您选择了其他非顺序的方法,则可以立即跳转到所需的缓冲区,因此缓冲区列表中是否有不需要的缓冲区都没有关系。我自己使用iswitchb
汤姆(Tom)

Answers:


23

这让我发狂..直到我修复它。

现在,没有从头开始消息完成缓冲区可以顺应您的流程了。请享用!

将其放在您的.emacs中:

;; Makes *scratch* empty.
(setq initial-scratch-message "")

;; Removes *scratch* from buffer after the mode has been set.
(defun remove-scratch-buffer ()
  (if (get-buffer "*scratch*")
      (kill-buffer "*scratch*")))
(add-hook 'after-change-major-mode-hook 'remove-scratch-buffer)

;; Removes *messages* from the buffer.
(setq-default message-log-max nil)
(kill-buffer "*Messages*")

;; Removes *Completions* from buffer after you've opened a file.
(add-hook 'minibuffer-exit-hook
      '(lambda ()
         (let ((buffer "*Completions*"))
           (and (get-buffer buffer)
                (kill-buffer buffer)))))

;; Don't show *Buffer list* when opening multiple files at the same time.
(setq inhibit-startup-buffer-menu t)

;; Show only one active window when opening multiple files at the same time.
(add-hook 'window-setup-hook 'delete-other-windows)

奖金:

;; No more typing the whole yes or no. Just y or n will do.
(fset 'yes-or-no-p 'y-or-n-p)

1
非常感谢您,我希望我能给您更多代表。
Alberto Zaccagni 2014年

不客气!:D
Ole 2014年

2
(if (get-buffer "*Messages*") (kill-buffer "*Messages*"))万一有人重新加载配置,这样做有意义吗?纯粹是受到您其他宏的启发。
西蒙“恢复莫妮卡”的光芒

2
直到我摆脱了这些缓冲区,我才意识到这些缓冲区有多困扰我。
自动机

它使emacs坠毁
alper

6

嗯,这部分是Emacs的工作方式,但是您可以做一些事情来总体上帮助切换。

首先,Emacs必须至少具有一个缓冲区。因此,即使您想要摆脱*scratch*and *Messages*,您也将剩下一个您不想要的缓冲区(或者您会得到Emacs忽略了您的最后一个kill-buffer请求的原因,因为它正在重新创建该缓冲区( b / c它需要一个缓冲区)。

因此,达到切换缓冲区更有意义的最佳方式是实际拥有切换的缓冲区。

而且,完成此操作后,您可以查看可用于切换缓冲区的所有选项/程序包-其中许多选项/程序包在Emacs Wiki上的SwitchingBuffers下列出ido是相当受欢迎,因为是iciclesanything


1
我要保存与的会话(desktop-save-mode 1),因此几乎总是在启动时会打开一些内容,请看一下这些软件包,谢谢。
Alberto Zaccagni 2011年

1

如果有人有兴趣只删除* scratch *缓冲区并留有* Messages *缓冲区,那么此代码对我有用:

(defun acg-initial-buffer-choice ()
  (if (get-buffer "*scratch*")
      (kill-buffer "*scratch*"))
  (get-buffer "*Messages*"))

(setq initial-buffer-choice 'acg-initial-buffer-choice)

您应该记住的一件事是,如果在任何时候Emacs都没有要显示的缓冲区(例如,您杀死了所有缓冲区),它将创建* scratch *或* Messages *缓冲区,因此请确保您不会删除工作流程中的所有缓冲区,否则* scratch *可能会重新恢复活力。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.