Erstellen Sie eine Datei unter dem Cursor in Vim


10

Ich habe eine Liste von Dateien

file1.ext
file2.ext
...

Wie erstelle ich eine Datei mit dem Namen file2.ext, wenn sich mein Cursor in file2.ext befindet? Ein bisschen wie gfnur zum Erstellen neuer Dateien (dies ist eine hypothetische Situation, nur gedacht, dass sie eines Tages hilfreich sein könnte).

Antworten:


17

Das erste, was mir in den Sinn kommt, ist die Verwendung des touchBefehls, der den Dateinamen unter dem Cursor an ihn übergibt.

:map <silent> <leader>cf :!touch <c-r><c-p><cr><cr>

Es gibt jedoch eine reine Vim-Lösung, die plattformübergreifend portierbar ist. Die integrierte Funktion writefileschreibt zeilenweise eine Liste in eine Datei. Wenn die Eingabeliste leer ist, wird natürlich eine leere Datei erstellt. ( :help writefileEinzelheiten siehe .) Wir können diesen Nebeneffekt ausnutzen:

:map <silent> <leader>cf :call writefile([], expand("<cfile>"), "t")<cr>

Beachten Sie, dass die Dateinamenextraktion mithilfe eines anderen expandMusters angepasst werden kann (siehe :help expand()).

Übrigens, wenn man eine Datei nicht erstellen, sondern nur zum Bearbeiten öffnen möchte, kann man eine gfähnliche Zuordnung definieren :

:map <leader>gf :e <cfile><cr>

wo der :eBefehl durch :tabeoder einen ähnlichen Befehl ersetzt werden kann.


1
+1 für den Unterricht <cfile>statt<C-r><C-f>
sehe

2

Ich nahm die ausgezeichnete Antwort von ib oben und erweiterte sie wie folgt. Mein Ziel war es, mit vim neue Markdown-Dateien zu erstellen, die für ein Wiki benötigt werden (in diesem Fall ein Gollum-Wiki).

Ich habe zuerst versucht:

map <silent> <leader>cf :call writefile([], expand("<cfile>"), "t")<cr>` 

Das Obige funktioniert wie in der Antwort angegeben. Zuerst dachte ich jedoch, dass es nicht funktioniert, weil ich das Öffnen der Datei in vim nicht wirklich gesehen habe. Wenn Sie das zweite Codebit unten verwenden, wird eine neue Datei geöffnet - das ist mehr, wonach ich gesucht habe. Also habe ich sie kombiniert und versucht:

map <leader>cf :e <cfile><cr>

Dies funktioniert jedoch nicht für ein Wiki, da beim Versuch, eine neue Datei im Wiki mit einer Syntax wie [[the-new-file]]der Wiki-Syntax zu erstellen, die Erweiterung der Datei in den Klammern nicht zulässig ist. Vim muss jedoch die Erweiterung kennen, wenn eine neue Datei erstellt wird, damit dies funktioniert. In diesem Fall habe ich verwendet:

    map <leader>cf :e <cfile>.md<cr>

so konnte ich neue Markdown-Dateien erstellen. Es gibt Möglichkeiten, dies weiter anzupassen (z. B. indem die Erweiterung nicht fest codiert wird), aber das oben Genannte funktioniert gut für meine Anforderungen. Wenn ich jemals eine andere Erweiterung benötige (zum Beispiel um eine .wiki-Datei zu speichern), nehme ich wahrscheinlich einfach die einfache Route und erstelle eine andere Karte wie:

    map <leader>cwf :e <cfile>.wiki<cr>

Als Nebeneffekt können Sie denselben Befehl verwenden, um die bereits vorhandene Markdown-Datei zu öffnen (der Standardbefehl gffunktioniert hier nicht, da die Dateierweiterung fehlt).


gffunktioniert wenn set suffixesadd=.wiki. Eine verbesserte Version von Ihnen cfwäre eine, die dies respektiert suffixesadd, zumindest für den Fall, dass sie nur einen Artikel enthält.
hjdivad
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.