VIM으로 작업 할 때 항상 여러 개의 창이 표시됩니다. 때때로 나는 그 창을 제자리에서 바꾸는 쉬운 방법을 원합니다. 이 작업을 더 쉽게 할 수있는 플러그인, 매크로 등이 있습니까? BTW, 저는 MiniBufExplorer를 사용합니다.
VIM으로 작업 할 때 항상 여러 개의 창이 표시됩니다. 때때로 나는 그 창을 제자리에서 바꾸는 쉬운 방법을 원합니다. 이 작업을 더 쉽게 할 수있는 플러그인, 매크로 등이 있습니까? BTW, 저는 MiniBufExplorer를 사용합니다.
답변:
어느 정도의 제어를 제공하는 몇 가지 유용한 명령이 내장되어 있지만 포괄적 인 것은 아닙니다. 주요 내용은 다음과 같습니다.
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
자세한 내용은.
Vim 창을 복사하여 붙여 넣기 위해 vimrc에서 다음 코드 스 니펫을 작성하고 사용하고 있습니다.
예를 들어 다음과 같은 단축키를 정의합니다.
<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
내가 물어 비슷한 질문 을 동시에 주위를 : 나는 특히 임의의 복잡한 레이아웃을 변경하지 않고 스왑 창에있는 방법을 원했다. 제안 된 솔루션 중 하나에서 vim 플러그인을 만들었습니다. 이것은 WindowSwap.vim입니다 . 선호하는 vim 플러그인 관리자와 함께 설치하고 소용돌이 치십시오.
WindowSwap.vim을 사용하면 간단하게
<Leader>yw
창문을 잡아 당기려면 <Leader>pw
해당 창을 붙여넣고 첫 번째 창 위치로 바꿉니다.물론 키 조합은 원하는대로 구성 할 수 있습니다.
으로 <c-w>r
또는 <c-w>x
당신이 회전하거나 교환 창 수없는 제한이 수직 및 수평 창 분할을 혼합합니다. 그리고 <c-w>H
당신이 많은 창문이 특히 기대 이상으로 창 레이아웃 변경을 할 수 있습니다.
따라서 창 / 버퍼 전환의 특정 요구를 충족시키기 위해 몇 가지 작업을 수행 할 수 있습니다. 다음은 현재 창을 왼쪽 상단 창으로 전환하는 예입니다 (일반적으로 세로로 최대화합니다).
function! SwitchMainWindow()
let l:current_buf = winbufnr(0)
exe "buffer" . winbufnr(1)
1wincmd w
exe "buffer" . l:current_buf
endfunction
nnoremap <c-w><c-e> :call SwitchMainWindow()<cr>
제 생각에는 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
현재 창을 맨 오른쪽으로 이동