불필요한 버퍼가 열리지 않도록 방지

불필요한 버퍼가 열리지 않도록 방지

나는 매일 자바스크립트 편집을 위해 emacs를 사용하고, Cx LEFT와 Cx RIGHT를 사용하는 버퍼 사이를 전환하는데 만족합니다(수정 중인 파일의 경로를 알기가 어렵더라도).

내 질문:

  1. 시작할 때 항상 가지고 있고 *scratch*열었 *Messages*습니다. .emacs를 넣으면 (kill-buffer "*scratch*")문제가 해결될 것이라고 생각했지만 그렇지 않습니다. 어떤 제안이 있습니까?

  2. 저는 파일을 열 때 항상 TAB 자동 완성을 수행합니다. 그래서 *Messages*완성 옵션이 있는 새 버퍼를 생성할 때마다 버퍼가 생성되는 것을 방지하려면 어떻게 해야 할까요? 아니면 작업이 완료된 후 emacs가 버퍼를 종료하도록 하려면 어떻게 해야 할까요? 내가 선택한 건가요?

제가 하고 있는 일이 제가 위에서 "해야 한다"고 말한 것과 다르다고 생각하신다면 의견을 들려주세요.

답변1

이게 나를 미치게 만들고 있어요… 내가 고칠 때까지요.

이제 없어졌어긁힌 자국,정보, 또는완성버퍼링이 프로세스와 충돌합니다. 즐기다!

이것을 .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)

답변2

음... 이것이 부분적으로 Emacs가 작동하는 방식이지만 전체적인 전환을 돕기 위해 할 수 있는 몇 가지 작업이 있습니다.

첫째, Emacs에는 최소한 하나의 버퍼가 있어야 합니다. 따라서 *scratch*and 를 제거하고 싶어도 *Messages*원하지 않는 다른 버퍼가 남게 됩니다(또는 Emacs가 kill-buffer버퍼를 다시 생성하기 때문에 마지막 요청을 무시한다는 것을 알게 될 것입니다(b/c 버퍼가 필요함). 완충기).

따라서 버퍼 전환이 더 적합한 지점에 도달하는 가장 좋은 방법은 실제로 버퍼를 갖는 것입니다.생각하다로 전환.

그리고 이 작업을 완료하면 버퍼 전환에 사용할 수 있는 모든 옵션/패키지를 살펴볼 수 있습니다. 그 중 대부분은 Emacs Wiki에 나열되어 있습니다.스위치 버퍼. ido매우 인기가 있고, icicles그렇습니다 anything.

답변3

누구든지 관심이 있다면*임시* 버퍼만 삭제*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에 표시할 버퍼가 없으면(예: 모든 버퍼를 종료하는 경우) *스크래치* 또는 *메시지* 버퍼를 생성한다는 것입니다. 작업 흐름의 모든 버퍼를 삭제하세요. 그렇지 않으면 *스크래치*가 다시 살아날 수 있습니다.

관련 정보