Vorhandene Aufträge beim Öffnen von Dateien erneut verwenden

382
Alex

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?

0
Erwägen Sie die Verwendung von "Bildschirm" oder wechseln Sie die virtuellen Terminals. LawrenceC vor 11 Jahren 0

4 Antworten auf die Frage

0
Ignacio Vazquez-Abrams

Nein. Vim (oder jede andere Anwendung für diese Angelegenheit) hat keine Möglichkeit, bash mitzuteilen, dass er stattdessen eine andere Aktion ausführen sollte.

tatsächlich kann eine Anwendung (einschließlich vim) mit der bash kommunizieren, von der aus sie gestartet werden Alex vor 11 Jahren 0
@Alex: Wie so? Ignacio Vazquez-Abrams vor 11 Jahren 0
z. B. wie in der anderen Antwort erwähnt, hat emacs die Option 'Mx shell'; In vim gibt es ein "!" gefolgt von einem Befehl zum Ausführen von Shell-Befehlen sowie "system ()" und anderen Funktionen, die in vimrc verwendet werden können. Alex vor 11 Jahren 0
@Alex: Die "kommunizieren nicht mit bash", sie führen eine ganz neue Shell aus. Ignacio Vazquez-Abrams vor 11 Jahren 0
0
Bram

Sie können vim Puffer verwenden, um mehrere Dateien zu bearbeiten.

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

Siehe auch den einfacheren Pufferwechsel-Tipp und die häufig gestellten Fragen zu Vim-Puffer .

Ich kenne diese Methode, aber sie ist zu anwendungsspezifisch. Sie müssen alle Dateien kennen, an denen sie arbeiten Alex vor 11 Jahren 0
Nicht sicher, was Sie von "zu anwendungsspezifisch" wählen. Ihr Beispiel verwendet auch vim. Wenn Sie nicht nach einer Möglichkeit suchen, mehrere Dateien mit vim zu bearbeiten, müssen Sie dies vielleicht in der Frage angeben. Um nicht im Voraus zu wissen, welche Dateien bearbeitet werden sollen, können Sie mit `: e weitere Dateien zur Pufferliste hinzufügen`. Bram vor 11 Jahren 0
vim wird sowohl in der Frage als auch in der Antwort als Beispiel angeführt. in der antwort kann man "vim $ 1" einfach durch "nano $ 1" oder "passwordmanagerpro $ 1" usw. ersetzen. Alex vor 11 Jahren 0
0
Alex

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!

0
psusi

Ich glaube nicht, dass es einen generischen Weg gibt, Arbeitsplätze wiederzuverwenden.

Für Ihren Bearbeitungsworkflow möchten Sie möglicherweise zu Emacs wechseln. Anstatt ctrl-z zu drücken, um zur Shell zurückzukehren, können Sie mit M-x ansi-termoder eine untergeordnete Shell in einem Emacs-Puffer ausführen M-x shellund zwischen der Shell und Ihren Bearbeitungspuffern hin und her wechseln oder sogar die Ansicht teilen, um beides 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 emacs nicht mit der Eingabe sagen, dass sie C-x C-f somefile<RET>es öffnen soll. Die Datei wird in einem anderen Puffer geöffnet und wechselt zu ihr .

Sie können den emacs-Server auch starten und ausführen emacsclient somefile, um die vorhandene emacs-Sitzung mitzuteilen, dass sie eine Datei öffnen soll. Wenn es bereits geöffnet ist, wird einfach auf den vorhandenen Puffer umgeschaltet.