如何检查Emacs中是否存在当前缓冲区?

如何检查Emacs中是否存在当前缓冲区?,emacs,elisp,Emacs,Elisp,我想写一个函数,如果给定的缓冲区名称已经存在,它将执行操作。例如: (if (buffer-exists "my-buffer-name") ; do something ) elisp是否有一个类似于我编造的“buffer exists”(缓冲区存在)函数的功能来检查缓冲区的存在 感谢来自以下网站的: (获取缓冲区名称) 返回名为name的缓冲区(字符串)。 如果没有名为name的活动缓冲区,则返回nil。 名称也可以是缓冲区;如果是,则值为该缓冲区。 (获取缓冲区创建名称) 返回

我想写一个函数,如果给定的缓冲区名称已经存在,它将执行操作。例如:

(if (buffer-exists "my-buffer-name")
    ; do something
 )
elisp是否有一个类似于我编造的“buffer exists”(缓冲区存在)函数的功能来检查缓冲区的存在

感谢来自以下网站的

(获取缓冲区名称) 返回名为name的缓冲区(字符串)。 如果没有名为name的活动缓冲区,则返回nil。 名称也可以是缓冲区;如果是,则值为该缓冲区。 (获取缓冲区创建名称) 返回名为name的缓冲区,或者创建这样的缓冲区并返回它。 如果没有名为name的活动缓冲区,将创建一个新缓冲区。 如果名称以空格开头,则新缓冲区不保留撤消信息。 如果name是一个缓冲区而不是一个字符串,那么它就是返回的值。 该值从不为零。
如果您想如上所述定义您的假设函数,可以这样做:

(defun buffer-exists (bufname)   (not (eq nil (get-buffer bufname))))
我使用它在启动时自动关闭
*scratch*
缓冲区,因此我不必在缓冲区列表中循环使用它,如下所示:

(defun buffer-exists (bufname) (not (eq nil (get-buffer bufname))))
(if (buffer-exists "*scratch*")  (kill-buffer "*scratch*"))
这就是我所做的:

(when (get-buffer "*scratch*")
  (kill-buffer "*scratch*"))
这将检查缓冲区是否有划痕。如果有这样的事,杀了它。
如果没有,什么也不做

不确定该谓词出现的版本,但现在Emacs有
buffer-live-p

buffer-live-p is a built-in function in `buffer.c'.

(buffer-live-p OBJECT)

Return non-nil if OBJECT is a buffer which has not been killed.
Value is nil if OBJECT is not a buffer or if it has been killed.

get buffer不应该用作bufferp的参数来验证它确实是一个缓冲区吗?(如果(bufferp(get buffer“my buffer name”);执行某些操作)无需使用
bufferp
。由于
get buffer
返回
nil
或一个缓冲区,您可以直接测试它:
(让((b(get buffer“foo”))(如果b…)
注意
(eq nil)
(null)
相同
,所以
(not(eq nil(get buffer bufname)))
(not(not(get buffer bufname))
,所以您可以放弃双重否定,只需使用
(get buffer bufname)
。此时,您可以将
缓冲区存在重新定义为
get buffer
@Stefan(挑剔)的别名给定的
buffer exists
get buffer
不完全相同,因为它将返回
t
nil
,但不会返回实际的缓冲区。这并不能回答问题。您必须输入一个缓冲区对象作为
对象,而不是缓冲区名称。如果您将一个活动缓冲区的名称作为
OBJE传递CT
你得到了返回值
nil
。也许,这是值得一提的。这是有意义的。也许我应该为此创建单独的问题?我只是搜索了
buffer-live-p
功能,只找到了这个方法。这对我有很大帮助,因为
get buffer
将返回
,而不是
nil
如果缓冲区曾经存在过!@AlexanderGriffith我无法重现此结果。After(kill buffer“scratch”)和then(get buffer“scratch”)返回nil。@Talespin_Kit如果您在一个脚本中运行它,那么
get buffer
将返回
。例如,尝试运行
(let((buffer(get buffer创建“scratch”))(kill buffer)(cons(buffer-live-p buffer)(get buffer buffer))
如果不需要else子句,请在
时使用
buffer-live-p is a built-in function in `buffer.c'.

(buffer-live-p OBJECT)

Return non-nil if OBJECT is a buffer which has not been killed.
Value is nil if OBJECT is not a buffer or if it has been killed.