VimがSSH脱出を傍受

VimがSSH脱出を傍受

(私が知る限り)解決すべき問題はありません。私はSSHをよりよく理解しようとしています。

私のシステムでは、sshエスケープ文字はチルダ(〜)です。どこかにSSHを接続すると、期待どおりに使用できます。

me@local$ ssh remote
me@remote$                # here I press tilde, control+z
[1]+  Stopped                 ssh remote
me@local$

みんな大丈夫です。しかしvim、リモートで実行すると、vimに突然エスケープ文字が表示されます。エスケープ文字が送信されなくなったようです。到着 sshしかし、代わりに渡す ssh、まるでエスケープ文字ではないようです。

me@local$ ssh remote
me@remote$ vim
# vim opens, here I press tilde, control+z
[1]+  Stopped                 vim
me@remote$ 

vim私の質問は、エスケープ文字の動作にどのような影響を与えるかです。ssh

ベストアンサー1

コメントから:

チルダとCtrl + Zキーを押す前にReturn / Enterを押すとどうなりますか? - ささやき

これにより、sshがバックグラウンドに配置されます。 Return/Enter の動作が変わるのはなぜですか?これはどこに文書化されていますか? - キル-9

2番目の質問に対する答えは最初の質問よりも簡潔であるため、逆に答えてみましょう。

この(〜の前にエンターを押してください)はどこに記録されていますか?

これOpenssh のマニュアルページのエスケープ文字セクションsshキーストロークをリモートサーバーに渡すのではなく、クライアントプログラムにタスクを実行させるコマンドエスケープシーケンスについて説明します。 2 番目の段落には次の文が含まれています。

特殊文字として解釈されるには、エスケープ文字は常に改行文字の後に続く必要があります。

これがやや曖昧で見落としやすいと思っても、私はあなたを責めることはありません。以前は状況が悪かった!私が最初にシャットダウン~.コマンドに遭遇したのは、1990年代のSunOS 4.xコマンドでしたtipマニュアルページ説明する:

行の最初の文字として表示されるチルダ文字(〜)は、プロンプトが特別な操作を実行することを示すエスケープ信号です。

この説明により、読者は~キーについて推論できます。行の最初の文字、前のキーストロークはReturn / Enterでなければなりません。文書から推論するのは良いことではありません。ほとんどの人はポイントを見逃して、tip彼らの(終了)命令が無視されるように見えるときに~.イライラを感じます。マニュアルsshページでは、説明をより明確に改善しました。

~これらのエスケープシーケンス(1981年に4.1BSD Unixにさかのぼると思われる)に先行するReturn / Enterが必要な理由は、誤ってセッションが切断されるのをrlogin防ぐためです(おそらくリモートサーバーにアップロードされたファイルから)。~.

vimのリモートセッションを実行するために追加のReturnキーが必要なように見えるのはなぜですか?

(あなたの質問に対する私の解釈)

vim他のコマンドを実行するのと比較して、リモートセッション呼び出しに「追加」Returnキー入力が必要な理由を正確に知ることはできません。しかし、私はいくつかの根拠のある推測を提示します。

  • vimリモートサーバーで実行していてEnterキーを押すと、入力する前にすでに別のキーストロークが入力されています~Ctrl-Z。おそらく矢印や、、、、hカーソルの移動キーを押した可能性があります。またはディスプレイを更新します。jklCtrl-L
  • vim呼び出しと入力の間にキーが押されていない場合、プログラムは状態を~Ctrl-Z要求vimするために端末プログラムに一連の文字を送信し、端末プログラムは応答として文字を再送信できます。これらのクエリと回答は通常、ターミナルプログラムには表示されません。応答の順序はキーストロークと同様にターミナルプログラムから来て、sshクライアントは~Returnの代わりにその前に来る他の文字を見るでしょう。

第2の推測は第1の推測よりも可能性が低いが、状況によってはこれらの推測が発生した。

最後に...

sshクライアントプログラムにエスケープシーケンス/コマンドを送信する最も信頼性の高い方法は、エスケープ文字を実際に2文字として扱うことです。戻りの後にチルダが続きます。ほとんどのコマンドでは、シーケンスには2回ではなく3回のキーストロークが必要です。

おすすめ記事