2016-11-01 134 views
0

如何在另一个缓冲区中处理缓冲区局部变量?我以为我可以用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))) 

我如何可以绑定在funlocal-var所以format-fun可以在另一个缓冲区处理它?

回答

2

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

使用不同的变量来避免这种情况。

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

我想我的功能,它工作得很好。我使用的是Emacs 22,所以它没有'defvar-local',但是我用'make-local-variable'做了。 – Barmar

+0

我看不出你的解决方案如何提供帮助。绑定相同的变量两次只会隐藏第一个绑定。 – Barmar

+0

我需要更改'format-fun',因为'(insert(symbol-value name))'如果值为'nil'则会出错。我把它改成了'(insert(format'%s“(symbol-value name)))' – Barmar

3

有一个elisp的函数来获取其它缓冲区一个缓冲区局部变量值:

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