当我使用VIM时,我总是可以看到多个窗口.有时我想有一个简单的方法,在那些地方交换那些窗户.有没有插件,宏等,使这更容易?顺便说一句,我使用MiniBufExplorer.
DrA*_*rAl 293
内置了一些有用的命令可以为您提供一定程度的控制,但它并不全面.主要是:
Ctrl- W,r(即按住CTRL,按下W,释放CTRL,按下r) - 旋转窗口(第一个窗口成为第二个窗口,第二个窗口成为第三个窗口,等等)
Ctrl- W,x- 将当前窗口与下一个窗口交换
Ctrl- W,Shift- H- 将此窗口移动到最左侧
Ctrl- W,Shift- K- 将此窗口移至顶部
(和Ctrl- W,Shift- J和Ctrl- W,Shift- 类似L).看到:
:help window-moving
Run Code Online (Sandbox Code Playgroud)
欲获得更多信息.
我写了并在我的vimrc中使用以下代码片段来复制粘贴我的Vim窗口.
这定义了以下快捷方式:
<c-w>y:"Yanks the window",即将当前窗口中缓冲区的编号存储在全局变量中.<c-w>pp:"将窗口置于当前窗口的位置",即它读取先前存储的缓冲区编号,并在当前窗口中打开该缓冲区.它还存储以前在当前窗口中的缓冲区的数量.如果通过"在某些地方交换窗口",则表示"在窗口B中打开窗口A中的缓冲区,反之亦然,而不更改窗口的位置",您可以使用以下键盘序列来交换窗口:
<c-w>y(缓冲缓冲区编号)<c-w>pp(粘贴缓冲区)<c-w>pp(再次粘贴缓冲区)它仅适用于Vim> = 7.0.
if version >= 700
function! HOpen(dir,what_to_open)
let [type,name] = a:what_to_open
if a:dir=='left' || a:dir=='right'
vsplit
elseif a:dir=='up' || a:dir=='down'
split
end
if a:dir=='down' || a:dir=='right'
exec "normal! \<c-w>\<c-w>"
end
if type=='buffer'
exec 'buffer '.name
else
exec 'edit '.name
end
endfunction
function! HYankWindow()
let g:window = winnr()
let g:buffer = bufnr('%')
let g:bufhidden = &bufhidden
endfunction
function! HDeleteWindow()
call HYankWindow()
set bufhidden=hide
close
endfunction
function! HPasteWindow(direction)
let old_buffer = bufnr('%')
call HOpen(a:direction,['buffer',g:buffer])
let g:buffer = old_buffer
let &bufhidden = g:bufhidden
endfunction
noremap <c-w>d :call HDeleteWindow()<cr>
noremap <c-w>y :call HYankWindow()<cr>
noremap <c-w>p<up> :call HPasteWindow('up')<cr>
noremap <c-w>p<down> :call HPasteWindow('down')<cr>
noremap <c-w>p<left> :call HPasteWindow('left')<cr>
noremap <c-w>p<right> :call HPasteWindow('right')<cr>
noremap <c-w>pk :call HPasteWindow('up')<cr>
noremap <c-w>pj :call HPasteWindow('down')<cr>
noremap <c-w>ph :call HPasteWindow('left')<cr>
noremap <c-w>pl :call HPasteWindow('right')<cr>
noremap <c-w>pp :call HPasteWindow('here')<cr>
noremap <c-w>P :call HPasteWindow('here')<cr>
endif
Run Code Online (Sandbox Code Playgroud)
小智 7
在我看来,http://vimcasts.org/episodes/working-with-windows/对这个问题有完美的答案。简单来说:
ctrl-w w 在打开的窗口之间循环ctrl-w h 将窗口聚焦到左侧ctrl-w j 将窗口焦点向下ctrl-w k 将窗口聚焦到上方ctrl-w l 将窗口聚焦到右侧ctrl-w r 旋转所有窗口ctrl-w x 与其邻居交换当前窗口ctrl-w H 将当前窗口移至最左侧ctrl-w J 将当前窗口移动到底部ctrl-w K 将当前窗口移至顶部ctrl-w L 将当前窗口移至最右侧