raccourci vim pour ouvrir un fichier sous le curseur dans une fenêtre déjà ouverte

12

Dans vim, vous pouvez ouvrir un fichier sous le curseur en utilisant la gfcommande.

On peut également facilement ouvrir ce fichier dans une nouvelle fenêtre partagée en appuyant sur <c-w> f. C'est une fonctionnalité vraiment agréable et qui fait gagner du temps.

Cependant, je ne peux pas comprendre comment ouvrir le fichier dans une fenêtre fractionnée déjà ouverte (sans en créer une nouvelle).

psibar
la source
1
Vous voudrez peut-être jeter un œil à la previewfonction (voir :h preview).
Stéphane Chazelas
À droite, j'utilise également l'aperçu. Cependant, je ne voulais pas ouvrir le fichier dans la fenêtre d'aperçu mais explicitement dans une autre.
psibar

Réponses:

10

J'ai rassemblé toutes les pièces pour faire l'affaire. La meilleure façon est de créer un mappage personnalisé pour toutes les commandes:

 map <F8> :let mycurf=expand("<cfile>")<cr><c-w> w :execute("e ".mycurf)<cr><c-w>p

Explication:

  • map <F8> mappe sur "F8" les commandes qui suivent
  • let mycurf=expand("<cfile>") récupère le nom de fichier sous le curseur et l'enregistre dans mycurf
  • <c-w>w change le focus sur la prochaine fenêtre de division ouverte
  • execute("e ".mycurf) ouvre le fichier enregistré dans mycurf
  • <c-w>pchange enfin le focus sur la fenêtre précédente (d'où nous venons en fait)
psibar
la source
1

Cela ne peut pas se faire facilement. Un [count]avant <C-w>fspécifie sur quelle correspondance de fichier 'path'est ouvert, il ne sélectionne pas une fenêtre existante. Uniquement pour la <C-w>wcommande, [count]signifie "aller au numéro de fenêtre existant".

Pour obtenir cette fonctionnalité, vous devez écrire un mappage personnalisé qui soit

  • saisit le fichier, va à la [count]fenêtre et émule la gfcommande, ou
  • clone le tampon actuel dans la [count]fenêtre et gfy exécute
Ingo Karkat
la source
Oui, la seule façon de le faire est d'écrire un mappage personnalisé. J'avais juste du mal à saisir le fichier sous le curseur. Mais je pense que je l'ai compris maintenant
psibar
1

J'ai cherché la fonction du même VIm et j'ai découvert cette solution qui fonctionne comme un charme:

map <F8> :vertical wincmd f<CR>

Page source .

Waldauf
la source
0

Cela a fonctionné pour moi:

function! OpenFileInPrevWindow()
    let cfile = expand("<cfile>")
    wincmd p
    execute "edit " . cfile
endfunction

nmap ,f :call OpenFileInPrevWindow()<CR>
sirex
la source