Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vim,如何滚动到命名缓冲区的底部_Vim_Scripting - Fatal编程技术网

Vim,如何滚动到命名缓冲区的底部

Vim,如何滚动到命名缓冲区的底部,vim,scripting,Vim,Scripting,我有一个vim脚本,它使用以下命令将输出拆分到一个新窗口: below split +view foo 我一直在试图找到一种方法,从任意缓冲区滚动到foo的底部,或是一种设置,使其默认显示缓冲区的底线 我在vim脚本的python块中完成了大部分工作。所以我有点像: python << endpython import vim import time import thread import sys def myfunction(string,sleeptime,*args):

我有一个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

python我通常会记录新的缓冲区编号(
让b_tgt=bufnr(“%”)
),更准确地说,是它的windows编号。然后,在
try finally
块中,我记录当前窗口编号(
让w_orig=bufwinnr(“%”)
),跳转到我需要做某事的窗口(
:exe w_tgt。'wincmd w'
),做某事(
:normal!G
,在您的情况下),然后跳回(在
:finally
子句中)到当前窗口(在操作开始时->
:exe w_orig'wincmd w'


现在,如果其他缓冲区可能已打开或关闭,我们需要每次查找目标窗口,因为其编号可能已更改。这是通过
bufwinnr(b_tgt)
完成的。我通常会记录新的缓冲区编号(
让b_tgt=bufnr(“%”)
)然后,在
try finally
块中,我记录当前的窗口号(
让w_orig=bufwinnr(“%”)
),跳转到我需要做某事的窗口(
:exe w_tgt。'wincmd w'
),做这件事(
:normal!G
),然后跳回(在
:finally
子句中)到当前窗口(在操作开始处->
:exe w_orig'wincmd w'


现在,如果其他缓冲区可能已经打开或关闭,我们需要在每次都查找目标窗口,因为它的编号可能已经更改

为了记录在案,我想在不切换到其他窗口的情况下设置其他窗口的光标。很明显,Neovim中有一个非常全面的API,函数以
nvim\u…
开始。我用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])

当然,如果要对当前窗口执行操作,可以使用
setpos()
函数在所有vim版本中都可用。

为了记录,我想设置不同窗口的光标,而不切换到它。很明显,在Neovim中有一个非常全面的API,函数以
nvim\ux…
开始。我在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])

当然,如果要对当前窗口执行操作,可以使用
setpos()
功能在所有vim版本中都可用。

是滚动很重要,还是您只是想将其发送到缓冲区的底部?我希望它留在缓冲区的底部,因为所添加的内容超出了可查看的空间。或多或少像一个普通的控制台窗口。滚动很重要还是很重要是否希望被传递到缓冲区的底部?我希望它保持在缓冲区的底部,因为所附加的内容超出了可视空间。或多或少像一个普通的控制台窗口。