원치 않는 버퍼가 열리지 않도록 방지


18

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

내 문제 :

  1. 내가 항상 시작 *scratch*하고 *Messages*열었을 때, (kill-buffer "*scratch*")내 .emacs 를 넣으면 문제가 해결 될 것이라고 생각 했지만 그렇지 않은 경우 제안 사항이 있습니까?

  2. 파일을 열 때 항상 TAB 자동 완성을 수행하므로 *Messages*완료 옵션이 포함 된 새 버퍼를 만들 때마다 이를 만들지 못하게하는 방법 또는 더 나은 방법으로 emacs가 파일을 죽이는 방법 내 선택 했어?

내가 상단에서 말한 것처럼 탐색하면서 "필요한 방식"이 아닌 무언가를하고 있다고 생각되면 의견을 말하십시오.


1
Trey가 제안한대로 버퍼를 전환하는 다른 방법을 탐색 할 수 있습니다. 순차적이지 않은 다른 방법을 선택하면 원하는 버퍼로 바로 이동할 수 있으므로 원하지 않는 버퍼가 버퍼 목록에 있는지 여부는 중요하지 않습니다. 나는 iswitchb를 사용 합니다.
Tom

답변:


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

천만에요! : D
Ole

2
(if (get-buffer "*Messages*") (kill-buffer "*Messages*"))구성을 다시로드하는 경우에 의미가 없습니까? 순수한 다른 매크로에서 영감을 얻었습니다.
사이먼 '복귀 모니카'샤인

2
나는이 버퍼들이 내가 그들을 제거 할 때까지 얼마나 귀찮게했는지 깨닫지 못했다.
automaton

그것은 emacs를 추락했다
alper

6

글쎄 ... 그것은 부분적으로 Emacs가 작동하는 방식이지만 일반적으로 전환을 돕기 위해 할 수있는 일이 있습니다.

먼저, Emacs에는 하나 이상의 버퍼가 있어야합니다. 따라서 및를 제거 *scratch*하고 싶더라도 *Messages*원하지 않는 또 다른 버퍼가 남아 있습니다 (또는 Emacs kill-buffer가 해당 버퍼를 다시 작성했기 때문에 마지막 요청을 무시한 지점을 얻습니다 ( b / c 하나의 버퍼가 필요합니다).

따라서 버퍼 전환이 더 의미있는 지점에 도달하는 가장 좋은 방법은 실제로 전환 하려는 버퍼를 보유 하는 것입니다.

이 작업을 마치면 버퍼를 전환하는 데 사용할 수있는 모든 옵션 / 패키지를 확인할 수 있습니다.이 중 대부분은 Emacs Wiki의 SwitchingBuffers 아래에 나열되어 있습니다 . ido꽤 인기가 같습니다 iciclesanything.


1
세션을 저장하고 (desktop-save-mode 1)있으므로 거의 항상 시작할 때 무언가를 열 것입니다. 패키지를 살펴볼 것입니다. 감사합니다.
Alberto Zaccagni

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 *가 다시 활성화 될 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.