很長一段時間我已經完成了:C-x b然後是一些「唯一」的名字,如xbxb
。所以我用switch-to-buffer
與一個不存在的緩衝區。你可以想象什麼C-x C-b顯示我:很多這樣的名字。 xbxb
,xbxbxxx
....一段時間後(一週左右),它真的很煩人,因爲我發現我已經使用了所有好名字。我怎樣才能打開一個臨時緩衝區
是否有更多的規範的方式來打開一個新的緩衝區?如果我想再運行一次shell,我會說C-u M-x shell。沿着這條線將是理想的。
很長一段時間我已經完成了:C-x b然後是一些「唯一」的名字,如xbxb
。所以我用switch-to-buffer
與一個不存在的緩衝區。你可以想象什麼C-x C-b顯示我:很多這樣的名字。 xbxb
,xbxbxxx
....一段時間後(一週左右),它真的很煩人,因爲我發現我已經使用了所有好名字。我怎樣才能打開一個臨時緩衝區
是否有更多的規範的方式來打開一個新的緩衝區?如果我想再運行一次shell,我會說C-u M-x shell。沿着這條線將是理想的。
使它這樣:
(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)))
而不是'(loop ...)'而不是'generate-new-buffer-name'。但是不是已經有一個命令 - 不知何故? +1在任何情況下。 – false 2012-04-28 15:18:53
不知道'generate-new-buffer-name',但沒有命令AFAIK。 – 2012-04-28 15:40:12
可以使用make-temp-name
爲文件生成一個名稱或隨機後綴緩衝區。與作爲基礎,你可以寫這樣的事情:
(defun generate-buffer()
(interactive)
(switch-to-buffer (make-temp-name "scratch")))
其中「從零開始」,可以通過更換自己喜歡的任意前綴。
+1也是!將不得不等待看看是否有現有的命令**不知何故**! – false 2012-04-28 21:08:16
我報名只是爲了回答這個問題(因爲我用這個功能很多,所以我想這會是有用的在這裏分享吧):
(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 "*"))))
我不明白你的命令和'C-x b'是'switch-to-buffer'之間的區別,只是你會用* *括起緩衝區名稱。 – false 2012-04-28 23:34:44
'switch-to-buffer'和'get-buffer-create'之間的區別在於'get-buffer-create'只會創建一個緩衝區,但不會改變它。而「切換到緩衝區」將嘗試切換到緩衝區,如果沒有這樣的緩衝區存在,它會提示你。我有些迂腐,所以我使用'interactive'參數's',它從頭開始提示您輸入緩衝區名稱。所以我猜如果你只是需要一個緩衝區,你會寫,然後不會在意* R。 P.狄龍的*答案很好。 – dotemacs 2012-04-29 16:45:17
我只是希望有一個特定名稱的臨時緩衝區。比方說我正在開發汽車,我將創建一個名爲'* cars *'的臨時緩衝區,記下來並移動到不同的緩衝區並在那裏做一些工作。所以如果我需要檢查我的汽車筆記,我知道這個緩衝區被命名爲'* cars *'。如果您使用設置的緩衝區前綴,如** R.P。狄龍**如上所示,那麼你將有太多的緩衝區和相同的前綴......要快速瀏覽它們並不容易。 – dotemacs 2012-04-29 16:54:14
我真的不知道你是什麼想。你說「我發現我已經使用了所有的好名字」,所以讓Emacs生成這些名字並不會有什麼好處,但是如果你要自己指定名字,它就不會再有任何規範比Cxbname
RET。
否則,已經建議讓你輸入一個字符串並使用某種「tmp buffer」模式創建一個新名字的功能之一似乎是明智的。
或scratch.el可能證明是有用的,如果你真正想要的是每個主要模式的單個臨時緩衝區。
你幾乎肯定從C-XC-B結合ibuffer
,並使用過濾器和/或組從更重要的分離出來,臨時緩存中受益。這將處理名單混亂。
你似乎奇怪地耐寫一個新的功能?即使這確實是內置的東西,但使用自定義函數時,沒有任何錯誤 - 這通常是您如何根據自己的喜好來定製Emacs的方法。
我很難寫一個新功能。並不是我從來沒有過,但是因爲我想和別人分享一個環境。否則,我完全被困在另一臺機器上。我期望像'C-u C-x C-b'這樣的東西。 – false 2012-04-29 19:32:58
使用「所有好名字」的含義:這些是我輸入的唯一名稱,例如'df'' asdf'' asdfff'等。 – false 2012-04-29 19:34:41
re:被「擱淺」,您是否考慮過將您的配置放入版本控制?很多人都這樣做,這確實是一個絕妙的解決方案。無論你走到哪裏,你只需要拉下自己的配置,然後就可以開始了。您可以對任何位置的配置進行更改,並將它們推送到中央存儲庫,然後在您移回另一臺計算機時將其拉回。 – phils 2012-04-29 20:50:54
(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)
您可以訪問someone else's Emacs,並且您想要打開一個新的緩衝區。如果幸運的話,此人已將enable-recursive-minibuffers
設置爲t
。如果沒有,你可以暫時做M-:到EVAL此的Emacs Lisp表達式(不要忘了在以後恢復這個參數):
(setq enable-recursive-minibuffers t)
現在,你打開一個新的緩衝區:
銅M-:將評估和打印的表達,迷你緩衝區中提示的結果:
(random)
這給你全方位表示的整數的隨機數(包括負面的),這是非常不可能被已經採取。按返回以結束切換到新的緩衝區。
我用它打開一個臨時緩衝區。好東西?幫助我追蹤我打開的緩衝區以及何時打開。
```
(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")))))
```
你真的需要所有這些臨時緩衝區?我的策略是擁有一個名爲「tmp」的單個緩衝區。當我需要它時,我切換到它,然後刪除或附加它。 – 2012-04-28 14:49:58
有時候我會,有時我不會...... – false 2012-04-28 15:10:06