Wie kann ich Vim veranlassen, einen Standarddateinamen zu verwenden, wenn keine Dateinamen angegeben wurden?

17

Ich öffne selten, wenn überhaupt, nur vimohne Dateinamen. Oft genug möchte ich etwas ausprobieren, normalerweise ein schnelles Wegwerfskript, und ich benenne sie normalerweise test.sh(oder eine Variante davon, wie test.py). Kann ich vimeinen test.shDateinamen annehmen, wenn ich vimohne Dateinamen lief? Normalerweise würde ich Aliase verwenden (wie vimsfür vim test.shund vimpfür vim test.pyoder das Ganze :w test.sh), aber ich frage mich, ob es einen Weg von innen gibt vim. Es wäre noch besser, wenn ich dies auf bestimmte Verzeichnisse beschränken könnte, wie /tmp, oder ~/dev.

muru
quelle

Antworten:

10

Fügen Sie dies am Ende Ihrer .vimrc-Datei ein (ändern Sie es entsprechend).

if @% == "" && getcwd() == "/tmp"
    :silent edit test.sh
endif

Dies prüft, ob der aktuelle Dateiname leer ist ( @%verweist auf den aktuellen Dateinamen) und ob das aktuelle Verzeichnis von vim leer ist /tmp. Sie können auch andere Verzeichnisse hinzufügen

(getcwd() == "/tmp" || getcwd() == "~/dev")

Anschließend wird test.sh stillschweigend bearbeitet. Wenn diese Datei bereits vorhanden ist, wird sie geladen. Andernfalls starten Sie einen neuen Puffer mit diesem Namen und die Datei wird erstellt, wenn Sie sie schreiben.

Ich habe die folgende Meldung während des Startvorgangs unterdrückt:

"test.sh" [New File]
Press ENTER or type command to continue
John O'M.
quelle
5

Eine Änderung der Antwort von John kann nützlich sein:

if @% == "" && getcwd() == "/tmp"
    :silent edit `=glob("test\.*", 1, 1)[0]`
endif

Das öffnet die erste Datei, die mit beginnt test..

Wenn Sie nicht nur die erste Datei, sondern auch andere übereinstimmende Dateien öffnen möchten, gehen Sie wie folgt vor:

if @% == "" && getcwd() == "/tmp"
    for i in glob("test\.*", 1, 1)
        :silent edit `=i`
    endfor
endif
user50136
quelle