2017-05-07 2 views
1

viまたはvimでファイルを編集しているときに頻繁にファイルを編集しているので、シェルコマンドを実行するためにシェルを開く必要があります。だから、私は:shを実行してシェルに行きます。シェルを使用しているときにviでファイルを開いたときを知るには?

これはシェルに私をもたらします。今、私が編集しているファイルに戻るときは、ファイルを返すためにfreckquently control + Dを実行します。これは正常に動作します。私は指示hereに従った。

私はssh -dにリモートAWSマシンで多くの作業を行います。そして、control+Dは、それらのマシンを終了する1つの方法です。残念ながら、これらのマシンにssh-dをインストールしている間に、私はvi/vimにファイルがオープンしているかどうかわかりません。control + Dを実行すると、セッションは完全に終了します。ssh

  • 1のいずれかに方法はありますが)、私はviや
  • 2で現在開いているファイルを持っていることを知っている)シェルを終了し、私のsshを閉じ誤って危険にさらすことなく安全に戻って私のファイルへ行きますセッション?あなたはlsof +D <dir> | grep REG

    は、あなたが同様-uでユーザーを指定することができ、よりフィルタリングについてディレクトリ

    で開かれたすべての通常のファイルを与える使用することができます

+0

viをctrl-zでバックグラウンドに送ることができない理由はありますか?あなたのシェルはうまく動作しますか?そして、 '' fg''でviを再開しますか? – user2141130

+0

私は実際にそのコマンドを聞いたことがありません!それは素晴らしいだろう! – Sother

答えて

4

これは、viが動作しているかどうかを調べるのではなく、親のシェルとviの間で "ジョブコントロール"(bashまたはshのジョブ制御のためのgrepマニュアルページ)。

バックグラウンドviにはctrl-zを使用し、fgを使用して再開します。これはすべてのPOSIX由来のシェルで動作し、sshで動作します。あなたが抱えている問題を回避するため、これは:shとCTRL-Dを使用してより好ましい

、あなたはviのを始めたとき、あなたが使用していた同じシェルを取得し、実行中の1つの以下のシェル(このISN」を持っています多くの場合、パフォーマンス上の問題がありますが、多くのシェルを実行している場合は、必要に応じてPIDを見る方が簡単です)。

:shの他の理由があるかもしれませんが、私が知っている唯一のものは、シェルから始まっていないviセッションでシェルを取得していることです。

vi -r(argsなし)は、viで開いている一連のファイルを含むスワップファイルのリストを出力します。 vi -r |& grep -B 3 'still running'のようなコマンドが便利です。

+0

正しいです – Sother

関連する問題