Vim Python的buffer.append(line)切换窗口焦点
我正在尝试通过这段Python代码从一个单独的线程中填充Vim的缓冲区。
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的缓冲区是否被允许,也想知道有没有安全的方式来处理这个问题。 不过如果是被允许的,我希望在添加行的时候能避免光标跳动。
为了重现这个行为,先把代码保存为某个名字的.vim文件,然后在Vim中打开它。接着
:source %
然后
PythonAppendTest
会有10行被添加到临时缓冲区。只需把光标移回你之前所在的窗口,你就会明白我在说什么。
如果你想知道为什么有人需要从单独的线程向缓冲区添加行,这里有几个例子:
- unix top
- unix tail
- rss
在你工作的时候,它们会出现在某个预定义的缓冲区里。
提前谢谢你。