我有一个vim脚本,使用以下命令将输出拆分为新窗口:
below split +view foo
我一直试图从任意缓冲区中找到一种方法滚动到 foo 的底部,或者设置一个默认显示缓冲区底线的设置。
我在vim脚本的python块中做了大部分内容。所以我有类似的东西:
python << endpython
import vim
import time
import thread
import sys
def myfunction(string,sleeptime,*args):
outpWindow = vim.current.window
while 1:
outpWindow.buffer.append("BAR")
#vim.command("SCROLL TO BOTTOM OF foo")
time.sleep(sleeptime) #sleep for a specified amount of time.
vim.command('below split +view foo')
thread.start_new_thread(myfunction,("Thread No:1",2))
endpython
需要为 vim.command(“滚动到foo的底部”)行找到要投入的内容
答案 0 :(得分:4)
我通常会记录新的缓冲区编号(let b_tgt = bufnr('%')
),更准确地说是它的窗口编号。然后,在try-finally
块中我记录当前窗口编号(let w_orig = bufwinnr('%')
),跳转到需要执行某些操作的窗口(:exe w_tgt.' wincmd w'
),执行操作(:normal! G
在您的情况下),并跳回(在:finally
子句中)到当前窗口(在操作的开头 - &gt; :exe w_orig.' wincmd w'
)。
现在,如果其他缓冲区可能已被打开或关闭,我们需要每次查找目标窗口,因为它的编号可能已更改。这是通过bufwinnr(b_tgt)
完成的。
答案 1 :(得分:0)
仅作记录,我想设置另一个窗口的光标而不切换到该窗口。幸运的是,在Neovim中,有一个相当全面的API,这些函数从nvim_...
开始。我在vimscript中以这种方式或多或少地解决了这个问题:
let l:bufname = "foo"
let l:lnum = getbufinfo(l:bufname)[0]['linecount']
let l:win_id = bufwinid(l:bufname)
call nvim_win_set_cursor(l:win_id, [l:lnum, 0])
当然,如果要在当前窗口上执行操作,可以只使用所有vim版本中可用的setpos()
函数。