2009-08-24 21 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