web-dev-qa-db-fra.com

Comment basculer entre une scission verticale et une scission horizontale dans vimdiff?

Je sais déjà comment utiliser la variable diffopt pour démarrer le mode Diff avec des divisions horizontales/verticales, mais pas comment basculer entre les deux lorsque j'ai déjà 2 fichiers ouverts pour la comparaison.

J'ai essayé la solution "Réponse acceptée" trouvée dans ce post plus ancien , mais en vain. Les commandes Ctrl + W ne fonctionnaient pas pour moi. Peut-être parce que j'exécute gVim en mode convivial Windows?

38
drapkin11

Следующая команда изменит вертикальное разделение на горизонтальное разделение:

ctrl+wзатемJ

Тобы вернуться к вертикальному разделению, используйте:

ctrl+wHили жеctrl+wL

Vous devez vous identifier ou vous enregistrer.

:h window-moving
:h ctrl-w_J
:h ctrl-w_K
:h ctrl-w_H
:h ctrl-w_L
74
Peter Rincker

Je suis vraiment en retard, mais c'est peut-être une solution intéressante. La solution de @PeterRincker ne fonctionne que si vous n'avez que quelques fenêtres ouvertes sans fenêtres intérieures.
J'ai trouvé cette fonction (utile) dans ma configuration d'exécution que j'aime partager avec u. Il est destiné à être mappé en tant que liaison de clé et à permettre à l'utilisateur de changer le groupe actuel en un groupe spécifié. Marquez qu’il ne bascule pas entre vertical et horizontal, mais que l’utilisateur dit lequel il aime (pourrait aussi être actif, même si ce scénario n’a pas de sens.) Le Vim arborescence a toujours deux fenêtres en tant que "partenaires". Les effets de ceci sont également observables lors du redimensionnement des fenêtres. Ce que je veux dire: Déclenchez la fonction, si elle s’applique à la fenêtre actuellement active et à sa fenêtre "partenaire".

" Switch to a vertical or horizontal split between two windows.
" Switching to currently used split results into the equal split.
" This is between the current window and the one window which is focused, when close the active window.
" This function does not adjust the windows height after the switch, cause this can't work correctly.
" 
" Arguments:
"   horizontal - Boolean to differ between both layouts.
"
function! s:switch_window_split(horizontal) abort
  let l:bufnr = bufnr('%')  " Get current buffer number to restore it in the new window.
  if a:horizontal | let l:vert = '' | else | let l:vert = 'vert ' | endif

  " Close current window and open new split with the cached buffer number.
  wincmd c
  execute l:vert . 'sbuffer ' . l:bufnr
endfunction

" Switch split layout.
nnoremap <leader>wS :<C-u>call <SID>switch_window_split(v:true)<CR>
nnoremap <leader>wV :<C-u>call <SID>switch_window_split(v:false)<CR>

Malheureusement, il modifie encore la taille de la fenêtre et ne laisse pas la forme telle quelle. J'y travaille, mais ce n'est pas si facile à réaliser, car je dois connaître la forme de la fenêtre "partenaire".

0
weilbith

Vous pouvez également faire ctrl-w + <arrow key> pour sélectionner la fenêtre.

0
electr0ninja