J'ai écrit et utilisé l'extrait de code suivant dans mon vimrc pour copier-coller mes fenêtres Vim. copier-coller mes fenêtres Vim.
Cela définit par exemple les raccourcis suivants :
-
<c-w>y
: "Yanks the window", c'est-à-dire stocker le numéro du tampon dans la fenêtre actuelle fenêtre actuelle dans une variable globale.
-
<c-w>pp
: "Met la fenêtre à la place de la fenêtre actuelle", c'est-à-dire qu'il lit le fichier numéro de tampon stocké précédemment et ouvre ce tampon dans la fenêtre courante. Il enregistre également le numéro du tampon qui se trouvait dans la fenêtre actuelle. actuelle.
Si par "permuter ces fenêtres en place", vous voulez dire "ouvrir le tampon de la fenêtre A dans la fenêtre B, et vice versa, sans changer la position des fenêtres", vous pouvez utiliser la séquence clavier suivante pour permuter les fenêtres :
- Sélectionner la fenêtre A (soit avec la souris, soit avec les commandes du clavier)
- Appuyez sur
<c-w>y
(enlever le numéro du tampon)
- Sélectionnez la fenêtre B
- Appuyez sur
<c-w>pp
(collage du tampon)
- Sélectionnez la fenêtre A
- Appuyez sur
<c-w>pp
(en collant à nouveau le tampon)
Il ne fonctionne que dans 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
2 votes
Par "permuter ces fenêtres en place", voulez-vous dire "ouvrir le tampon qui est dans la fenêtre A dans la fenêtre B, et vice versa, sans changer la position des fenêtres" ?
1 votes
Oui, c'est exactement ce que je veux.