Comment passer le nom de fichier actuel avec un chemin d'accès différent à la ligne de commande

8

Existe-t-il un moyen de faire fonctionner le symbole spécial %avec les noms de chemin sur la ligne de commande? Par exemple, je voudrais faire:

:diffsplit Path\to\other\directory\%

Pour que je puisse @:comparer rapidement des fichiers du même nom. Cependant, cela ouvre juste un nouveau tampon appelé %.

Bien sûr, je pourrais faire:

:exe 'diffsplit Path\to\other\directory\'.expand('%')

Mais c'est lourd car je ne peux pas tabuler des répertoires complets lors de la saisie de la commande.

Existe-t-il une autre meilleure façon de procéder?

Voici une question connexe , mais elle ne répond pas exactement à ma situation.

Edit: Juste pour clarifier, je voudrais pouvoir réutiliser la commande exactement pour différents fichiers. Par conséquent, une solution qui remplit simplement automatiquement le fichier actuel dans la ligne de commande ne fonctionnera pas. La même commande doit fonctionner pour différents noms de fichiers.

Tumbler41
la source
Vous pouvez utiliser une cmap pour% telle qu'elle se développe en nom de fichier, ce qui pourrait aider: D
SibiCoder
Cela a le même problème que la solution de Kent. Dès que vous appuyez sur %, il remplira le nom de fichier, mais quand je veux réutiliser cette ligne, l'ancien nom de fichier sera toujours présent. Je voudrais que le% insère dynamiquement le nom de fichier actuel, quel qu'il soit à ce moment-là sans avoir à le retaper.
Tumbler41
2
:diffsplit Path/to/other/directory/%:t
Sato Katsura
Wow, je pensais avoir essayé ça, mais tu as raison, ça marche! Merci! Si vous voulez le mettre dans une réponse, je l'accepterai.
Tumbler41

Réponses:

10

Les caractères spéciaux (voir :h cmdline-special) et les modificateurs de nom de fichier (voir :h filename-modifiers) sont développés sur la ligne de commande, donc:

:diffsplit Path/to/other/directory/%:t
Sato Katsura
la source
1

Il s'avère donc que c'est un problème Windows stupide. Le remède à cela est d'utiliser simplement des barres obliques dans le nom du chemin. c'est à dire :diffsplit Path/to/other/directory/%fonctionne très bien.

J'ai résolu cela sur mon système en utilisant l'option set shellslashqui utilise par défaut des barres obliques, même sous Windows.

Tumbler41
la source
Oui, la barre oblique inverse est utilisée à la fois pour échapper à la signification particulière de %, et est le séparateur de chemin par défaut sous Windows. Vim ne sait pas à quoi vous pensiez.
Ingo Karkat
Vous voyez, j'y ai pensé. J'ai donc pensé que je pouvais juste faire un directory\\%mais cela ne fonctionnait toujours pas. IDK, mais je suppose que cela n'a pas d'importance car les barres obliques résolvent le problème.
Tumbler41
0

Je ne sais pas si cela vous convient:

:diffsplit Path/to/somewhere/<c-r>%

Encore une frappe de votre original, le <C-r>, afin de remplir la %valeur du registre.

Kent
la source
Cela ne permet toujours pas d'utiliser @:de futurs fichiers car il "code en dur" le nom du fichier actuel.
Tumbler41
puis encapsulez une commande personnalisée comme :Mydiff /path/to/there/pour que le chemin puisse être complété par tabulation. il suffit de passer ceci à votre commande / fonction avecexec
Kent