So übergeben Sie den aktuellen Dateinamen mit einem anderen Pfad zur Befehlszeile


8

Gibt es eine Möglichkeit, das spezielle Symbol %mit Pfadnamen in der Befehlszeile arbeiten zu lassen? Zum Beispiel möchte ich tun:

:diffsplit Path\to\other\directory\%

Damit kann ich @:schnell gleichnamige Dateien vergleichen. Dies öffnet jedoch nur einen neuen Puffer namens %.

Natürlich könnte ich tun:

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

Dies ist jedoch umständlich, da ich beim Eingeben des Befehls keine vollständigen Verzeichnisse auflisten kann.

Gibt es einen anderen besseren Weg, dies zu tun?

Hier ist eine verwandte Frage , die meine Situation jedoch nicht genau anspricht.

Bearbeiten: Zur Verdeutlichung möchte ich den Befehl genau für verschiedene Dateien wiederverwenden können. Eine Lösung, die die aktuelle Datei in der Befehlszeile einfach automatisch ausfüllt, funktioniert also nicht. Der gleiche Befehl muss für verschiedene Dateinamen funktionieren .


Sie können eine cmap für% verwenden, so dass sie zu Dateiname erweitert wird, was hilfreich sein könnte: D
SibiCoder

Dies hat das gleiche Problem wie Kents Lösung. Sobald Sie drücken %, wird der Dateiname gefüllt, aber wenn ich diese Zeile wiederverwenden möchte, ist der alte Dateiname weiterhin vorhanden. Ich möchte, dass% den aktuellen Dateinamen dynamisch einfügt, unabhängig davon, was gerade passiert, ohne ihn erneut eingeben zu müssen.
Tumbler41

2
:diffsplit Path/to/other/directory/%:t
Sato Katsura

Wow, ich dachte, ich hätte das versucht, aber du hast Recht, das funktioniert! Vielen Dank! Wenn Sie es in eine Antwort einfügen möchten, werde ich es akzeptieren.
Tumbler41

Antworten:


10

Sonderzeichen (siehe :h cmdline-special) und Dateinamenmodifikatoren (siehe :h filename-modifiers) werden in der Befehlszeile erweitert.

:diffsplit Path/to/other/directory/%:t

1

Es stellt sich also heraus, dass es sich um ein dummes Windows-Problem handelt. Abhilfe schafft einfach die Verwendung von Schrägstrichen im Pfadnamen. dh :diffsplit Path/to/other/directory/%funktioniert gut.

Ich habe dies auf meinem System behoben, indem ich die Option verwendet habe, set shellslashdie standardmäßig auch unter Windows Schrägstriche verwendet.


Ja, der Backslash wird sowohl verwendet, um der besonderen Bedeutung von zu entgehen %, als auch ist das Standardpfadtrennzeichen unter Windows. Vim kann nicht sagen, was du vorhast.
Ingo Karkat

Ich habe daran gedacht. Also dachte ich mir, ich könnte einfach ein machen, directory\\%aber das funktionierte immer noch nicht. IDK, aber ich denke, es spielt keine Rolle, da Schrägstriche das Problem lösen.
Tumbler41

0

Ich weiß nicht, ob das für dich in Ordnung ist:

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

Nur noch ein Tastendruck auf Ihr Original, das <C-r>, um den %Registerwert zu füllen .


Dies erlaubt immer noch nicht die Verwendung @:für zukünftige Dateien, da der aktuelle Dateiname "hart codiert" wird.
Tumbler41

Schließen Sie dann einen benutzerdefinierten Befehl wie :Mydiff /path/to/there/folgt ein, damit der Pfad auf der Registerkarte vervollständigt werden kann. Übergeben Sie dies einfach an Ihren Befehl / Ihre Funktion mitexec
Kent
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.