我是一個初學者vi用戶。我不知道術語,但我想將我的gvim終端(屏幕?)分成2個窗口,每個窗口有5個不同的文件(緩衝區?)。我可以在一個窗口中打開前5個文件,然後分割到第二個窗口,但我不知道如何在第二個窗口中打開5個不同的文件。我一直無法找到這些信息。通常我在:n
和:prev
之間切換文件。在gvim中創建兩個獨立文件(?)的窗口
再說一遍:我想要在左窗口上顯示文件1-5和右窗口上的文件6-10。這可能嗎?
我是一個初學者vi用戶。我不知道術語,但我想將我的gvim終端(屏幕?)分成2個窗口,每個窗口有5個不同的文件(緩衝區?)。我可以在一個窗口中打開前5個文件,然後分割到第二個窗口,但我不知道如何在第二個窗口中打開5個不同的文件。我一直無法找到這些信息。通常我在:n
和:prev
之間切換文件。在gvim中創建兩個獨立文件(?)的窗口
再說一遍:我想要在左窗口上顯示文件1-5和右窗口上的文件6-10。這可能嗎?
事實上,你可以有窗口局部的參數列表:
:arglocal
:args file1 file2 file3 file4 file5
:vsplit
:arglocal
:args file6 file7 file8 file9 file10
這種方式,你可以有一個參數列表(與文件1-5)左窗口,另一個(與文件6-10)在分裂的右邊窗口。然後窗口中的:next
和:first
等命令相互獨立。
看起來你只需要執行幾次拆分。
你可以在窗口之間用移動Ctrl-w j/Ctrl-w k
我只想要兩個窗口,我想在一個窗口中創建1-5個文件,在另一個窗口中創建6-10個文件,這樣我就可以在當前窗口的文件中用':n'和':prev' 。 – Stuart
:split
命令獲取一個文件名,並在一個新的水平分割窗口中打開它。 (但是,您也可以首先使用:split
/<C-W>s
/<C-W>v
,然後使用:edit
/:next
另一個文件。)在垂直分割前加上:vertical
(或更短的:vsplit
)。有了這個,你可以創建你想要的佈局。
聚焦於不同窗口中,有與Ctrl鍵 + W¯¯,例如啓動許多映射<C-w>j
去下面的窗口。完整列表見:help CTRL-W
。
我很熟悉分裂。我試圖編輯該問題的澄清。 – Stuart
啊,你的問題真的不清楚。請看我的其他答案。 –
選項卡是窗口的視口,窗口是緩衝區的視口。您可以在任何窗口中查看任何緩衝區。我不會說它不可能創建一些解決方法,例如:您可以通過:command
創建命令:NEXT
和:PREV
,並使它們僅在通過:EDIT
在此窗口中打開的緩衝區上迭代:如下面的代碼所示。但我會強烈建議使用一些幫助緩衝區切換的插件,如Command-T(我有用於緩衝區切換的nnoremap ,b :CommandTBuffer<CR>
),並忘記了效率非常低的:next
/:previous
命令。
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')
arglist! Facepalm ... – romainl
@romainl我從來沒有使用窗口本地arglists到目前爲止,但不是很高興發現Vim你有覆蓋! –
如何將一個額外的參數添加到當前的本地參數? – Stuart