在另一个缓冲区中使用缓冲区局部变量的值

时间:2016-11-01 00:35:52

标签: emacs scope elisp

如何在另一个缓冲区中处理缓冲区局部变量?我以为我可以用let绑定它,但是在将变量传递给另一个使用symbol-value的函数时遇到了麻烦。这是一个小例子,

(defvar-local local-var nil)
(setq local-var "a")

(defun fun ()
  (let ((local-var local-var))
    (with-temp-buffer
      (format-fun 'local-var)
      (message (buffer-string)))))

(defun format-fun (name)
  (insert (symbol-value name)))

如何在local-var中绑定fun,以便format-fun可以在另一个缓冲区中处理它?<​​/ p>

2 个答案:

答案 0 :(得分:3)

有一个 elisp 函数可以从另一个缓冲区获取缓冲区本地变量值:

(buffer-local-value 'var (get-buffer  "your-buffer-name"))

答案 1 :(得分:2)

将变量绑定到let并不会阻止它在切换缓冲区时被重新分配。

使用其他变量来避免这种情况。

(defun fun ()
  (let ((new-var local-var))
    (with-temp-buffer
      (format-fun 'new-var)
      (message (buffer-string)))))