Ouvrir le nom de fichier sous le curseur comme gf, mais dans un nouvel onglet (ou scinder)?

43

La commande en mode normal permet d' gfaccéder à un fichier avec le chemin d'accès actuel du curseur.

Mais il le fait dans la fenêtre actuelle en remplaçant le texte actuel. Cela signifie que vous devez revenir explicitement en arrière pour revenir plus tard et que vous devez potentiellement écrire des modifications dans le tampon actuel.

Je suis sûr que c'est possible avec l'ouverture du fichier sous le curseur dans un nouvel onglet à la place?

Volker Siegel
la source
3
Activer l' 'hidden'option ( set hidden) vous permet de vous écarter des mémoires tampons non enregistrées. Pour moi, il s'agissait d'un énorme gain de productivité et il était essentiel de ne plus compter uniquement sur les scissions et les séparations.
tommcdo

Réponses:

56

EDIT: Suggérez des mappages bien symétriques pour le cas fractionné verticalement, car Vim dispose par défaut de deux mappages pour le cas fractionné horizontal.

Il y a plusieurs façons de modifier le "fichier sous le curseur", et bien que vous puissiez certainement reconfigurer gfpour modifier une nouvelle page à onglet en tant que @ alexander-myshov mentionne, cela signifie que vous avez deux façons de le modifier dans une nouvelle page à onglet, mais aucun moyen de éditez-le dans la fenêtre courante, ce que vous pouvez aussi parfois vouloir faire. Il n’est pas difficile d’utiliser les mappages standard, mais si vous souhaitez en modifier l’un gf, je vous suggère de changer de mappage afin de ne pas en perdre un.

Certaines des manières de modifier un nom de fichier sous le curseur sont:

  • gf - Modifier le fichier existant sous le curseur dans la même fenêtre
  • C-Wf - Éditer un fichier existant sous le curseur dans une fenêtre scindée
  • C-WC-F - Éditer un fichier existant sous le curseur dans une fenêtre scindée
  • C-Wgf - Modifier le fichier existant sous le curseur dans une nouvelle page

Il n’existe pas de mappage standard permettant d’éditer le fichier existant sous le curseur dans une division verticale, mais vous pouvez y parvenir en scindant d’abord la fenêtre verticalement, puis en modifiant le fichier sous le curseur dans la fenêtre active.

  • C-Wv+ gf- Modifier le fichier existant sous le curseur dans une fenêtre fractionnée verticalement

Comme vous pouvez le voir ci-dessus, il existe deux correspondances par défaut pour l'édition de fichier sous le curseur dans une division horizontale. Vous pouvez donc remapper l'une d'elles sur la chaîne de clés ci-dessus, en élargissant le groupe de cartes pour couvrir également le cas de division verticale. Vous pouvez lier quoi que ce soit, bien sûr, mais cela semble compléter la symétrie bien: nnoremap <C-W><C-F> <C-W>vgf. Maintenant vous avez

  • gf - Modifier le fichier existant sous le curseur dans la même fenêtre
  • C-Wf - Éditer un fichier existant sous le curseur dans une fenêtre scindée
  • C-WC-F - Éditer un fichier existant sous le curseur dans une fenêtre fractionnée verticalement
  • C-Wgf - Modifier le fichier existant sous le curseur dans une nouvelle page

Vous pouvez également accéder à une ligne particulière du fichier si le nom du fichier sous le curseur est suivi d'un numéro de ligne. Si tu as

filename:10

vous pouvez éditer le fichier et déplacer le curseur à la ligne 10 avec gF. L'équivalent est vrai pour C-WFune scission et C-WgFune page à onglet. Compléter la symétrie pour une scission verticale n’est pas aussi simple ici, mais je suggérerais que la C-WC-S-Fcarte obtenue avec nnoremap <C-W><C-S-F> <C-W>vgF, imitant le Fou Shift+ fdes cartes par défaut en tant que candidat.

Ceci :est un exemple, vous pouvez utiliser n'importe quel caractère qui n'est pas un caractère de nom de fichier (voir :h 'isfname').


Toutes ces commandes sont livrées avec de la sauce aux pommes, comme

  • élargir les wildchars
  • chercher dans plus d'endroits que le répertoire courant, selon votre 'path'choix
  • ajout d'une extension de fichier au nom du fichier, selon votre 'suffixesadd'choix
  • sinon modifiez le nom de fichier donné pour trouver une correspondance, selon votre 'includeexpr'choix

Pour plus d'informations :help gf, consultez les rubriques d'aide relatives à ces différentes options.


Si le nom de fichier sous le curseur nomme un fichier qui n'existe pas, vous feriez mieux d'utiliser les commandes d'édition standard avec <cfile>, comme

:edit <cfile> // edit non-existent file under cursor in current window
:split <cfile> // edit non-existent file under cursor in split window
:vsplit <cfile> // edit non-existent file under cursor in vertical split window
:tabe <cfile> // edit non-existent file under cursor in new tabpage

et avec ceux-ci bien sûr, vous pouvez utiliser des choses comme :spl+10 filenamedéplacer le curseur sur une ligne particulière ou :tabe+/cologne filenamepour déplacer le curseur jusqu'à la première occurrence d'un motif.

Jjaderberg
la source
+1 Meilleur commentaire avec une explication claire, bien meilleur que la documentation divisée en plusieurs rubriques.
Loves Probabilité
8

Il suffit d'utiliser des liaisons pour cela:

ouverture dans une nouvelle fenêtre (split):

nnoremap gf <C-W>f
vnoremap gf <C-W>f

ouverture dans un nouvel onglet:

nnoremap gf <C-W>gf
vnoremap gf <C-W>gf

vérifiez aussi ceci: :help CTRL-W_gf

Alexander Myshov
la source
Est-ce que cela fonctionne vraiment pour vous? Vim ne semble pas vouloir que je reprenne gfquelque chose d'autre. Même nnoremap gf :echo "hello"<CR> toujours ouvre le fichier sous le curseur dans un nouveau tampon (et oui, j'ai acheté vimrc).
tandrewnichols
Ah, tant pis - j'ai un plugin qui interfère.
tandrewnichols