Verwenden Sie vorhandene Jobs beim Öffnen von Dateien erneut

0

Die Frage wird am besten durch Beispiele gegeben:

vim example.txt #Opens Vim on new or existing file

Ctrl+Z

vim someother.txt

Ctrl+Z

vim example.txt #Auto-runs `fg 1` since example.txt is already open

Ist das möglich?

Alex
quelle
Ziehen Sie in Betracht, screenvirtuelle Terminals zu verwenden oder zu wechseln.
LawrenceC

Antworten:

0

Nein. Vim (oder jede andere Anwendung in dieser Angelegenheit) kann nicht mitteilen, dass stattdessen eine andere Aktion ausgeführt werden soll.

Ignacio Vazquez-Abrams
quelle
Tatsächlich können einige Anwendungen (einschließlich vim) mit bash kommunizieren, von dem aus sie gestartet wurden
Alex
@Alex: Wie so?
Ignacio Vazquez-Abrams
zb wie in der anderen antwort erwähnt hat emacs M-x shelloption; In vim !folgt ein Befehl zum Ausführen von Shell-Befehlen sowie "system ()" und andere Funktionen, die in vimrc verwendet werden können.
Alex
@Alex: Diese "kommunizieren nicht mit bash", sie führen eine ganz neue Shell aus .
Ignacio Vazquez-Abrams
0

Möglicherweise möchten Sie die Verwendung von VIM-Puffern zum Bearbeiten mehrerer Dateien in Betracht ziehen.

Bearbeiten Sie beide Dateien vim example.txt someother.txtund wechseln Sie dann mit zwischen ihnen :buffer <filename>.

Siehe auch den Tipp zum leichteren Umschalten von Puffern und die häufig gestellten Fragen zu Vim-Puffern .

Bram
quelle
Ich kenne diese Methode, aber sie ist zu anwendungsspezifisch + erfordert, dass man alle Dateien kennt, an denen sie arbeiten werden
Alex
Nicht sicher, was Sie von "zu anwendungsspezifisch" mena. In Ihrem Beispiel wird auch vim verwendet. Wenn Sie nicht nach einer Möglichkeit suchen, mehrere Dateien mit vim zu bearbeiten, müssen Sie dies möglicherweise in der Frage angeben. Da Sie nicht im Voraus wissen, welche Dateien Sie bearbeiten sollen, können Sie mit weitere Dateien zur Pufferliste hinzufügen :e <file>.
Bram
vim wird sowohl in der Frage als auch in der Antwort als Beispiel angegeben. In der Antwort kann man einfach vim $1mit nano $1oder passwordmanagerpro $1usw. ersetzen
Alex
0

Eine Beispiellösung funktioniert unter bash (erfordert paste, grep, sed). Es ist spezifisch für Vim, kann aber an einen anderen Editor angepasst werden.

jim ()  { 
  paste <(jobs) <(jobs -p | xargs -n1 ps o cmd= -p) |
  grep "$1$" > ~/tmp/jm && fg $(cat ~/tmp/jm | sed -r 's/^\[([0-9]+).*/\1/')
  [[ $? == 1 ]] && vim $1
}

Genießen!

Alex
quelle
0

Ich glaube nicht, dass es eine so generische Möglichkeit gibt, Jobs wiederzuverwenden.

Für Ihren Bearbeitungsworkflow möchten Sie möglicherweise zu Emacs wechseln. Anstatt Strg + Z zu drücken, um zur Shell zurückzukehren, können Sie eine untergeordnete Shell in einem Emacs-Puffer mit M-x ansi-termoder ausführen M-x shellund zwischen der Shell und Ihren Bearbeitungspuffern hin- und herschalten oder sogar die Ansicht teilen, um beide gleichzeitig anzuzeigen. Emacs verfolgt das Arbeitsverzeichnis der Shell. Wenn Sie also im Dateisystem navigieren und entscheiden, dass Sie eine Datei öffnen möchten emacs somefile, müssen Sie nur angeben, dass Emacs sie öffnen soll, C-x C-f somefile<RET>und die Datei wird in einem anderen Puffer geöffnet und es wird zu ihr gewechselt .

Sie können auch den Emacs-Server starten und ausführen emacsclient somefile, um der vorhandenen Emacs-Sitzung mitzuteilen, dass eine Datei geöffnet werden soll. Wenn es bereits geöffnet ist, wird nur auf den vorhandenen Puffer umgeschaltet.

psusi
quelle