防止打开不需要的缓冲区

Alb*_*gni 20 emacs buffer

我使用 emacs 进行日常 javascript 编辑,在缓冲区之间切换我使用 Cx LEFT 和 Cx RIGHT 并且我对此很好(即使我发现很难知道我正在修改的文件的路径)。

我的问题:

  1. 在我总是拥有*scratch**Messages*打开的启动时,我认为放入(kill-buffer "*scratch*")我的 .emacs 可以解决问题,但事实并非如此,您有什么建议吗?

  2. 当我打开文件时,我总是做 TAB 自动完成,所以每次我创建一个*Messages*包含完成选项的新缓冲区时,我如何防止它创建,或者更好的是,我如何让 emacs 杀死它,在我完成之后做出我的选择?

如果您认为我正在做的事情与我在顶部所说的导航不“应该的方式”,请说出您的意见。

小智 29

这让我很生气......直到我修复它。

现在没有scratchmessagescompletions缓冲区来干扰您的流程。享受!

把它放在你的 .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)
Run Code Online (Sandbox Code Playgroud)

奖金:

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

  • 非常感谢你,我希望我能给你更多的代表。 (2认同)
  • 如果重新加载配置,执行`(if (get-buffer "*Messages*") (kill-buffer "*Messages*"))` 难道没有意义吗?纯粹受到你的其他宏的启发。 (2认同)
  • 在我摆脱它们之前,我没有意识到这些缓冲区对我的困扰有多大。 (2认同)

Tre*_*son 6

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

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

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

而且,当您完成此操作后,您可以查看可用于切换缓冲区的所有选项/包 - 其中许多列在 Emacs Wiki 的SwitchingBuffers下。 ido非常受欢迎,就像icicles和 一样anything