2009-08-24 56 views
2

我想通过使用此python代码从单独的线程填充Vim的缓冲区。Vim python的buffer.append(行)切换窗口的焦点

python << PYTHON_CODE 

import vim 
import time 

buffer_number = -1 
class AppendLineTest(Thread): 
    def run(self): 
     buffer = vim.buffers[buffer_number - 1] 

     for i in range(10): 
     buffer.append('Line number %s' % i) 
     time.sleep(1) 

PYTHON_CODE 

function! s:test() 
    split TestBuffer 
    exec 'python buffer_number = '.bufnr('%') 

    setlocal noswapfile 
    setlocal bufhidden=delete 
    setlocal buftype=nofile 
    setlocal nobuflisted 
    setlocal nonumber 
    setlocal nowrap 
    setlocal nocursorline 

    python AppendLineTest().start() 
endfunction 

command! -nargs=0 PythonAppendTest call s:test() 

我不知道,访问来自单独的线程Vim的缓冲区是允许的,难怪有一些安全调度方式。 但是,如果允许,我想摆脱追加线发生时的光标跳跃。

所以要重现行为,请将代码保存到一些name.vim文件并在Vim中打开它。然后

:source % 

然后

PythonAppendTest 

线将被添加的10倍到临时缓冲器中。只要将光标移回到你所在的窗口,你就会明白我在说什么。

如果你想知道为什么会有人需要线从单独的线程添加到缓冲区,这里有一个例子:

  • UNIX顶部
  • UNIX尾
  • RSS
  • 电子邮件

工作时,它们出现在某个预定义的缓冲区中。

在此先感谢。

回答

2

我不认为Vim是非常容忍多线程没有修补。讨论中有更多的细节at this link,但我怀疑你想要什么远不是微不足道的。

+0

感谢您的链接。太伤心。 – 2009-08-24 13:21:30