我是初学者vi用户。我不知道术语,但我想把我的gvim终端(屏幕?)拆分成2个窗口,每个窗口有5个不同的文件(缓冲区?)。我可以在一个窗口中打开前5个文件,然后拆分到第二个窗口,但我不知道如何在第二个窗口中打开另外5个不同的文件。我一直无法找到这些信息。通常我会在:n
和:prev
之间切换文件。
再说一遍:我想在左侧窗口中输入文件1-5,在右侧窗口中输入文件6-10。这可能吗?
答案 0 :(得分:7)
你确实可以拥有窗口本地参数列表:
:arglocal
:args file1 file2 file3 file4 file5
:vsplit
:arglocal
:args file6 file7 file8 file9 file10
这样,左窗口可以有一个参数列表(文件1-5),右侧窗口可以有另一个参数列表(文件6-10)。然后,窗口中的:next
和:first
等命令彼此独立。
答案 1 :(得分:3)
缓冲区是全球性的。这意味着您不能拥有两个垂直窗口,可以容纳两组独有的缓冲区。当然,这同样适用于标签。
所以,只需使用两个实例:一个在左边,文件为1-5,另一个在左边,文件为6-10。
由于这两个实例是分开的,因此您可以安全地使用:n
et :prev
而不会“溢出”。
答案 2 :(得分:2)
选项卡是Windows的视口,窗口是缓冲区的视口。您可以在任何窗口中查看任何缓冲区。我不认为不可能创建一些解决方法:例如您可以通过:NEXT
创建命令:PREV
和:command
,并使它们仅通过:EDIT
在此窗口中打开的缓冲区进行迭代:如下面的代码所示。但我强烈建议使用一些有助于缓冲区切换的插件,如Command-T(我有nnoremap ,b :CommandTBuffer<CR>
用于缓冲区切换),而忘记效率极低的:next
/ :previous
命令。 / p>
function s:Edit(args)
let w:winbuflist=get(w:, 'winbuflist', [bufnr('%')])
execute 'edit' a:args
let buf=bufnr('%')
if index(w:winbuflist, buf) == -1
call add(w:winbuflist, bufnr('%'))
endif
endfunction
function s:Switch(direction)
let buf=bufnr('%')
let w:winbuflist=get(w:, 'winbuflist', [buf])
let idx=index(w:winbuflist, buf)
if idx==-1 || w:winbuflist ==# [buf]
if idx == -1
echohl ErrorMsg
echomsg 'Current buffer was not opened using :E or was opened in another window'
echohl None
endif
execute a:direction
return
elseif a:direction is# 'next'
let idx += 1
if idx == len(w:winbuflist)
let idx=0
endif
elseif a:direction is# 'previous'
let idx -= 1
if idx == -1
let idx=len(w:winbuflist)-1
endif
endif
execute 'buffer' w:winbuflist[idx]
endfunction
function s:RemoveBuf(buf)
for tab in range(1, tabpagenr('$'))
for win in range(1, tabpagewinnr(tab, '$'))
call filter(getwinvar(win, 'winbuflist', []), 'v:val isnot '.a:buf)
endfor
endfor
endfunction
augroup BufWinList
autocmd! BufWipeout * :call s:RemoveBuf(+expand('<abuf>'))
augroup END
" \/\/\/\/\/\/\/ Warning: this is not a completion option. It also
" \/\/\/\/\/\/\/ makes command do the expansion of its arguments.
command -complete=file -nargs=? -bar EDIT :call s:Edit(<q-args>)
command -nargs=0 -bar NEXT :call s:Switch('next')
command -nargs=0 -bar PREV :call s:Switch('previous')
答案 3 :(得分:0)
看起来你只需要执行几次拆分。
您可以使用Ctrl-w j / Ctrl-w k
在窗口之间移动答案 4 :(得分:0)
:split
命令采用文件名,并在新的水平拆分窗口中打开。 (但您也可以先:split
/ <C-W>s
/ <C-W>v
,然后:edit
/ :next
另一个文件。)前置:vertical
(或垂直分割的较短:vsplit
)。有了这个,您可以创建所需的布局。
要聚焦不同的窗口,有许多映射以 Ctrl + W 开头,例如<C-w>j
转到下面的窗口。有关完整列表,请参阅:help CTRL-W
。