2012-04-28 88 views
12

很長一段時間我已經完成了:C-x b然後是一些「唯一」的名字,如xbxb。所以我用switch-to-buffer與一個不存在的緩衝區。你可以想象什麼C-x C-b顯示我:很多這樣的名字。 xbxb,xbxbxxx ....一段時間後(一週左右),它真的很煩人,因爲我發現我已經使用了所有好名字。我怎樣才能打開一個臨時緩衝區

是否有更多的規範的方式來打開一個新的緩衝區?如果我想再運行一次shell,我會說C-u M-x shell。沿着這條線將是理想的。

+0

你真的需要所有這些臨時緩衝區?我的策略是擁有一個名爲「tmp」的單個緩衝區。當我需要它時,我切換到它,然後刪除或附加它。 – 2012-04-28 14:49:58

+0

有時候我會,有時我不會...... – false 2012-04-28 15:10:06

回答

6

使它這樣:

(defun new-scratch() 
    "open up a guaranteed new scratch buffer" 
    (interactive) 
    (switch-to-buffer (loop for num from 0 
          for name = (format "blah-%03i" num) 
          while (get-buffer name) 
          finally return name))) 
+1

而不是'(loop ...)'而不是'generate-new-buffer-name'。但是不是已經有一個命令 - 不知何故? +1在任何情況下。 – false 2012-04-28 15:18:53

+1

不知道'generate-new-buffer-name',但沒有命令AFAIK。 – 2012-04-28 15:40:12

10

可以使用make-temp-name爲文件生成一個名稱或隨機後綴緩衝區。與作爲基礎,你可以寫這樣的事情:

(defun generate-buffer() 
    (interactive) 
    (switch-to-buffer (make-temp-name "scratch"))) 

其中「從零開始」,可以通過更換自己喜歡的任意前綴。

+0

+1也是!將不得不等待看看是否有現有的命令**不知何故**! – false 2012-04-28 21:08:16

3

我報名只是爲了回答這個問題(因爲我用這個功能很多,所以我想這會是有用的在這裏分享吧):

(defun tmpbuf (buf) 
    "open a buffer, 
if it doesn't exist, open a new one" 
    (interactive "sBuffer name: ") 
    (switch-to-buffer 
    (get-buffer-create (concat "*" buf "*")))) 
+0

我不明白你的命令和'C-x b'是'switch-to-buffer'之間的區別,只是你會用* *括起緩衝區名稱。 – false 2012-04-28 23:34:44

+1

'switch-to-buffer'和'get-buffer-create'之間的區別在於'get-buffer-create'只會創建一個緩衝區,但不會改變它。而「切換到緩衝區」將嘗試切換到緩衝區,如果沒有這樣的緩衝區存在,它會提示你。我有些迂腐,所以我使用'interactive'參數's',它從頭開始提示您輸入緩衝區名稱。所以我猜如果你只是需要一個緩衝區,你會寫,然後不會在意* R。 P.狄龍的*答案很好。 – dotemacs 2012-04-29 16:45:17

+0

我只是希望有一個特定名稱的臨時緩衝區。比方說我正在開發汽車,我將創建一個名爲'* cars *'的臨時緩衝區,記下來並移動到不同的緩衝區並在那裏做一些工作。所以如果我需要檢查我的汽車筆記,我知道這個緩衝區被命名爲'* cars *'。如果您使用設置的緩衝區前綴,如** R.P。狄龍**如上所示,那麼你將有太多的緩衝區和相同的前綴......要快速瀏覽它們並不容易。 – dotemacs 2012-04-29 16:54:14

3

我真的不知道你是什麼想。你說「我發現我已經使用了所有的好名字」,所以讓Emacs生成這些名字並不會有什麼好處,但是如果你要自己指定名字,它就不會再有任何規範比CxbnameRET

否則,已經建議讓你輸入一個字符串並使用某種「tmp buffer」模式創建一個新名字的功能之一似乎是明智的。

scratch.el可能證明是有用的,如果你真正想要的是每個主要模式的單個臨時緩衝區。

你幾乎肯定從C-XC-B結合ibuffer,並使用過濾器和/或組從更重要的分離出來,臨時緩存中受益。這將處理名單混亂。

你似乎奇怪地耐寫一個新的功能?即使這確實是內置的東西,但使用自定義函數時,沒有任何錯誤 - 這通常是您如何根據自己的喜好來定製Emacs的方法。

+0

我很難寫一個新功能。並不是我從來沒有過,但是因爲我想和別人分享一個環境。否則,我完全被困在另一臺機器上。我期望像'C-u C-x C-b'這樣的東西。 – false 2012-04-29 19:32:58

+0

使用「所有好名字」的含義:這些是我輸入的唯一名稱,例如'df'' asdf'' asdfff'等。 – false 2012-04-29 19:34:41

+0

re:被「擱淺」,您是否考慮過將您的配置放入版本控制?很多人都這樣做,這確實是一個絕妙的解決方案。無論你走到哪裏,你只需要拉下自己的配置,然後就可以開始了。您可以對任何位置的配置進行更改,並將它們推送到中央存儲庫,然後在您移回另一臺計算機時將其拉回。 – phils 2012-04-29 20:50:54

1
(defun yashi/new-scratch-buffer-in-org-mode() 
    (interactive) 
    (switch-to-buffer (generate-new-buffer-name "*temp*")) 
    (org-mode)) 
(bind-key "<f7>" 'yashi/new-scratch-buffer-in-org-mode) 

我使用deft一個快速的筆記,但有時我知道我不會需要的內容,但需要以組織模式的緩衝區。爲此,它一直在爲我服務。點擊F7再次會創建一個類似名稱的緩衝區,在我的情況下爲*temp*<2>,根據Uniquify

順便說一句,如果你有興趣,這裏是一個啓動一個新的快速文件的新緩衝區的命令。F6來啓動它。

(defun yashi/deft-new-file() 
    (interactive) 
    (let ((deft-filter-regexp nil)) 
    (deft-new-file))) 
(bind-key "<f6>" 'yashi/deft-new-file) 
0

您可以訪問someone else's Emacs,並且您想要打開一個新的緩衝區。如果幸運的話,此人已將enable-recursive-minibuffers設置爲t。如果沒有,你可以暫時做M-:到EVAL此的Emacs Lisp表達式(不要忘了在以後恢復這個參數):

(setq enable-recursive-minibuffers t) 

現在,你打開一個新的緩衝區:

  • CXb提示輸入緩衝器名稱
  • M-:將評估和打印的表達,迷你緩衝區中提示的結果:

    (random) 
    
  • 這給你全方位表示的整數的隨機數(包括負面的),這是非常不可能被已經採取。按返回以結束切換到新的緩衝區。

1

我用它打開一個臨時緩衝區。好東西?幫助我追蹤我打開的緩衝區以及何時打開。

```

(defun tmp-buffer() 
    "Make a temporary buffer and switch to it - Like C-n for Sublime etc" 
    (interactive) 
    (switch-to-buffer (get-buffer-create (concat "tmp-" (format-time-string "%m.%dT%H.%M.%S"))))) 

```