Я написал и использовал следующий фрагмент кода в моем vimrc для
скопируйте мои окна Vim.
Это определяет, например, следующие ярлыки:
<c-w>y
: «Янкирует окно», т.е. сохраняет номер буфера в
текущее окно в глобальной переменной.
<c-w>pp
: «Размещает окно на месте текущего окна», то есть читает
Номер буфера сохраняется ранее и открывает этот буфер в текущем окне.
Он также хранит номер буфера, который был в текущем
окно.
Если под «заменой этих окон местами» вы подразумеваете «открытие буфера в
окно A в окне B, и наоборот, без изменения положения
windows ", вы можете использовать следующую последовательность клавиш для замены окон:
- Выбрать окно A (либо с помощью мыши, либо с помощью клавиш клавиатуры)
- Нажмите
<c-w>y
(смещение номера буфера)
- Выберите окно B
- Нажмите
<c-w>pp
(вставьте буфер)
- Выберите окно A
- Нажмите
<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