6 Stimmen

Wie prüft man, ob er noch im Vim-Shell-Modus ist?

Geben Sie in vim ein :sh wechselt zur Shell, und Ausgang kann die Shell verlassen und zu vim zurückkehren. Gibt es irgendeinen Befehl, um zu prüfen, ob er sich im Vim-Shell-Modus befindet? Damit ich nicht versehentlich vim zum Öffnen der gleichen Datei wieder. Ich möchte das folgende Szenario vermeiden:

vim myfile > :sh > exit > vim myfile // Warnung erhalten, wenn eine andere vim-Instanz dieselbe Datei bearbeitet

Dies ist das normale Szenario:
vim myfile > :sh > exit // weiter bearbeiten
vim myfile > :wq > vim myfile // weiter bearbeiten

5voto

ZyX Punkte 50799

Zusätzlich zu der Antwort von @a3nm können Sie Folgendes tun

  1. 使い道 pstree -h : Es gibt den Prozessbaum mit dem aktuellen Zweig hervorgehoben aus, und Sie müssen nur prüfen, ob vim in der Hervorhebung vorhanden ist.
  2. Eine weitere Möglichkeit ist ps t : Es werden alle Prozesse angezeigt, die das aktuelle Terminal benutzen, und es sollte angezeigt werden vim in einer Liste, wenn Sie sich in :sh . ps -oargs t kann nützlicher sein, wenn Sie wissen wollen, mit welchen Argumenten Sie vim ausgeführt haben.

Diese Methoden sind zuverlässiger, weil VIMRUNTIME , VIM y MYVIMRC Umgebungsvariablen können von Ihnen überschrieben werden, um einige Anpassungen vorzunehmen (BTW, sie werden von vim für die Verwendung in Vimscripts definiert, nicht von :sh ). Sie funktionieren auch bei anderen Prozessen, die die Ausführung einer Subshell ermöglichen, aber keine Umgebungsvariablen definieren.

Ich würde auch vorschlagen, die Verwendung von <C-z> im normalen Modus oder :suspend / :stop in Ex, weil diese die Shell verwenden, von der aus vim gestartet wurde, anstatt eine neue zu erstellen. Dieses Verhalten gibt Ihnen Zugriff auf die Geschichte der Befehle, die Sie vor dem Start von vim eingegeben haben, und ermöglicht es Ihnen auch, komplexere und zeitaufwändigere Shell-Konfigurationen zu schreiben, ohne jedes Mal warten zu müssen.

Falls Sie <C-z> beide Methoden funktionieren, aber die erste Methode hebt vim nicht hervor, weil es auf der gleichen Ebene (mit dem gleichen Parent) wie pstree selbst, wahrscheinlich knapp unter oder über pstree in der Grafik. Dies ermöglicht auch die dritte Methode: jobs Shell-Baukasten.

Für die Wiederherstellung von <C-z> sollten Sie fg (eine einzige % in zsh und bash funktioniert auch), was weniger zu tippen ist als exit (aber mehr als <C-d> ).

3voto

a3nm Punkte 8217

Le :sh Befehl in vim scheint die VIMRUNTIME , VIM y MYVIMRC Umgebungsvariablen, so dass Sie einfach prüfen können, ob sie definiert sind. Zu diesem Zweck können Sie Folgendes ausführen echo $VIM die in einer normalen Shell eine leere Zeile zurückgeben sollte, und etwas wie /usr/share/vim in einer Shell, die von vim .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X