Запобігайте відкриванню небажаних буферів


18

Я використовую emacs для щоденного редагування JavaScript, для перемикання між буферами я використовую Cx LEFT і Cx RIGHT, і я добре з цим (навіть якщо мені важко знати шлях до файлу, який я змінюю).

Мої проблеми:

  1. під час запуску, який я завжди мав *scratch*і *Messages*відкривав, я думав, що введення (kill-buffer "*scratch*")моїх .emacs вирішить проблему, але це не так, чи є у вас пропозиція?

  2. коли я відкриваю файли, я завжди роблю автоматичне *Messages*заповнення TAB, тому щоразу, коли я створюю новий буфер, що містить параметри для завершення, як я запобігаю створенню цього, а ще краще, як змусити Emacs вбити його після того, як я зробив свій вибір?

Скажіть свою думку, якщо ви думаєте, що я роблю щось, що не є "таким, як повинно бути", коли я пересуваюсь, як я вже говорив вгорі.


1
Ви можете вивчити інші способи перемикання буферів, як запропонував Трей. Якщо ви обрали інший метод, який не є послідовним, ви можете перейти до потрібного буфера відразу, тому не має значення, чи є небажані буфери у списку буферів. Я сам користуюся iswitchb .
Том

Відповіді:


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
Дякую тобі за це, я б хотів, щоб я міг дати тобі більше представників.
Альберто Закканні

Ви, швидше ласкаво просимо! : D
Оле

2
Чи не було б сенсу робити це (if (get-buffer "*Messages*") (kill-buffer "*Messages*"))у випадку, якщо хтось перезавантажить конфігурацію? Цілком натхненний іншим вашим макросом.
Саймон 'Відновити Моніку' блиск

2
Я не зрозумів, наскільки ці буфери мене турбували, поки я їх не позбувся.
автомат

Це розбило emacs
Альпер

6

Ну ... це частково так, як працює Emacs, але є деякі речі, які допомагають перемикатися загалом.

По-перше, Emacs повинен мати принаймні один буфер. Отже, навіть якщо ви хочете позбутися *scratch*і *Messages*, вам залишиться ще один буфер, який ви не хотіли (або ви отримаєте точку, коли Emacs просто ігнорував ваш останній kill-bufferзапит, оскільки він створював цей буфер ( б / с йому потрібен один буфер).

Отже, найкращий спосіб дістатися до точки, коли комутація буферів має більше сенсу - це фактично мати буфери, на які ви хочете перейти.

І, зробивши це, ви можете переглянути всі варіанти / пакети, доступні вам для перемикання буферів - багато з яких перераховані на Emacs Wiki під SwitchingBuffers . idoє досить популярною, як iciclesі є anything.


1
Я зберігаю свої сесії (desktop-save-mode 1), тому майже завжди у мене буде щось відкрито при запуску, я перегляну ці пакети, дякую.
Альберто Закканні

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 не залишиться буфера для відображення (наприклад, ви вбили всі буфери), він створить або «подряпину», або буфер * Повідомлення *, тож переконайтеся, що ви виграли » не видаляючи всі буфери під час робочого процесу, або * подряпина * може відновитись знову.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.