Angenommen, der aktuelle Puffer ist eine Datei, die zum Bearbeiten geöffnet ist und daher :e
nicht angezeigt wird E32: No file name
.
Ich möchte einen oder alle ziehen:
- Der Dateiname genau wie in der Statuszeile angezeigt, z
~\myfile.txt
- Ein vollständiger Pfad zur Datei, z
c:\foo\bar\myfile.txt
- Nur der Dateiname, z
myfile.txt
Antworten:
TL; DR
:let @" = expand("%")
>Dadurch wird der Dateiname in das unbenannte Register kopiert . Anschließend können Sie ihn mit good old
p
einfügen. und natürlich können Sie dies einem Schlüssel zur schnelleren Verwendung zuordnen.:nmap cp :let @" = expand("%")<cr>
Sie können dies auch für den vollständigen Pfad verwenden
:let @" = expand("%:p")
Erläuterung
Vim verwendet das unbenannte Register , um gelöschten oder kopierten (gerissenen) Text zu speichern. Wenn Sie es einfügen, wird der Text aus diesem Register gelesen.
Mit können
let
wir Text manuell im Register speichern,:let @" = "text"
aber wir können auch das Ergebnis eines Ausdrucks speichern.Im obigen Beispiel verwenden wir die Funktion,
expand
die Platzhalter und Schlüsselwörter erweitert. In unserem Beispiel erweitern wirexpand('%')
den aktuellen Dateinamen. Wir können es wieexpand('%:p')
für den vollständigen Dateinamen ändern .Siehe
:help let
:help expand
:help registers
für Detailsquelle
unnamedplus
als Zwischenablage verwendenlet @+ = expand("%")
"%:h"
diese Option , um den vollständigen Pfad ohne den Dateinamen abzurufen.Fast das, wonach Sie fragen, und es könnte auch funktionieren:
Ctrl+R %
Zieht den aktuellen Dateinamen an Ihre Position (Eingabeaufforderung, Bearbeitungspuffer, ...). Weitere Informationen finden Sie in diesem Vim-Tipp .quelle
Ctrl+R %
funktioniert iminsert
Modus - aber imedit
ModusCtrl+R
bedeutet Wiederholen.Wenn Sie den aktuellen Pufferdateinamen in die Zwischenablage auf Systemebene einfügen möchten, ändern Sie das Register in @ +:
Bearbeiten 20140421: Ich verwende diese häufig, daher habe ich einige Verknüpfungen erstellt. Linux Vims funktionieren anscheinend etwas anders als Mac Vims , daher gibt es auch dafür einen Sonderfall. Wenn Sie Folgendes in Ihre
~/.vimrc
:Dann wird beispielsweise
<leader>cf
der relative Pfad des aktuellen Puffers kopiert (der Standardleiter ist backslash (\
)). Ich benutze diese oft, um Befehle in einer Datei auszuführen oder andere Dinge in der Befehlszeile zu tun. Ich verwende den letzten Dateinamen / Verzeichnisnamen nicht oft.Sie könnten intuitivere Zuordnungen in Betracht ziehen
<leader>cfr
,<leader>cfa
z. B. für relativ, für absolut,<leader>cff
nur für Dateinamen,<leader>cfd
für Verzeichnis.quelle
"*
und"+
sind gleichwertig, so dass Sie auf die Plattformprüfungen verzichten und einfach verwenden können@+
In diesem
:reg
Fall wird der Name der aktuellen Datei im%
Register angezeigt. Sie können es"%p
zum Beispiel mit einfügen .Wenn Sie wie ich häufig zum 'alternativen' Puffer wechseln, ist es sehr praktisch, dass der vollständige Pfad- und Dateiname in das
#
Register eingetragen wird. Sie können es"#p
zum Beispiel mit einfügen .Hinweis (nur für den Fall, dass dies ein für mein Setup spezifisches Verhalten ist): Ich verwende VIM 7.4.52 unter Ubuntu 14.04.4 LTS.
quelle
Kombinieren von Informationen aus einigen anderen Antworten: Wenn Sie den aktuellen vollständigen Pfad zu einer Datei ziehen und in einem anderen Fenster in den Befehlspuffer einfügen möchten, tun Sie dies zuerst
:let @" = expand("%:p")
, wechseln Sie dann in ein anderes Fenster und geben Sie einCtrl+R "
.Nützlich zum Kopieren einer Datei, während Sie im selben Verzeichnis bleiben und die alte geöffnet lassen. Beispielsweise:
quelle
Hier ist meine Lösung:
quelle
Ich benutze xclip, um auf die Zwischenablage von X zuzugreifen, also benutze ich:
quelle