Wie kann der Inhalt eines neuen Puffers über die Befehlszeile angegeben werden?

7

Gibt es eine Möglichkeit, Vim so aufzurufen, dass ein Puffer mit einigen auf dem Terminal angegebenen Inhalten geöffnet wird, dh nicht in einer Datei gespeichert wird?

Zum Beispiel möchte ich ausführen vimund einen Puffer öffnen lassen foo, bar, baz and qux, auf den geschrieben steht.

Gibt es eine Option, die dies tut?

Gonçalo Ribeiro
quelle

Antworten:

11

Hast du so etwas versucht?

$ echo "foo, bar, baz, and qux" | vim -

Oder so?

$ vim -c "put='foo, bar, baz, and qux'"
romainl
quelle
Ooh süß! Ich habe es versucht, vim < echo "test"aber ohne Erfolg. Ich wusste es nicht vim -! Und +/ -ckann auch nützlich sein. Vielen Dank.
Gonçalo Ribeiro
3

Diese Lösung ist vollständig von Romainls inspiriert (vielen Dank an ihn) , ermöglicht jedoch das Öffnen mehrerer Puffer mit mehreren Zeichenfolgen.

Fügen Sie die folgenden Zeilen zu Ihrer .zshrc(oder .bashrceiner relevanten Datei, in der Sie Ihre Bash-Funktionen definieren) hinzu.

function mvim {
    CMD="vim "
    for string in "$@"
    do
        CMD=$CMD"-c \"enew | put='"$string"'\" "
    done
    CMD=$CMD"-c \"bufdo 1d\""

    eval $CMD
}

Nach dem Sourcing Ihrer .zshrcDatei können Sie die folgende Funktion aufrufen:

mvim "foo bar" "baz" "and quz"

Dadurch wird eine vim-Instanz mit 3 Puffern geöffnet, von denen jeder eine Zeichenfolge enthält.

Wenn kein Argument angegeben wird, wird eine reguläre vim-Instanz gestartet. Wenn ein Argument eine leere Zeichenfolge ist, wird ein leerer Puffer erstellt.

BEARBEITEN Ich habe festgestellt, dass aus einem Grund, den ich nicht verstehe, am Anfang jedes Puffers eine leere Zeile erstellt wird, also habe ich die Zeile hinzugefügt

CMD=$CMD"-c \"bufdo 1d\""

Um diese leere Zeile in allen Puffern loszuwerden.

statox
quelle
1
Das ist ein interessantes Drehbuch. Könnte nützlich sein. Vielen Dank :)
Gonçalo Ribeiro
3

Ich habe kürzlich nach einer Möglichkeit gesucht, wie der Inhalt der Zwischenablage in einem neuen Puffer in vim abgelegt werden kann. Ich denke, es lohnt sich, es hier zu teilen:

vim -c "put! *"

UPDATE:
Dies ist putder Text aus dem Register *vor !der aktuellen Zeile.

Die Register *und +beziehen sich auf die Zwischenablage in Windows.

Unter Linux +hat der Inhalt der Zwischenablage und *enthält den ausgewählten Text.

Mattia72
quelle
In der vimrc könnte das sogar automatisch gemacht werden, wenn argc 0 ist.
dash-tom-bang
Vielleicht könnten Sie beziehen :help quotestarund :help quoteplusin Ihrer Antwort diejenigen , die nicht wissen , diese Register zu helfen , zu verstehen , warum dieser Befehl funktioniert. Auch unter GNU / Linux gibt es einen Unterschied zwischen *und +, während sie unter Windows gleichwertig sind.
Gonçalo Ribeiro