web-dev-qa-db-ja.com

シェルでViキーバインディングを使用するときに現在のViモードを表示するにはどうすればよいですか?

Tcshシェルでviキーバインディングを使用しています。

現在、どのviモード(insertモードまたはcommandモード)を使用しているかわからないため、多くのフラストレーションが発生します。

シェルで現在のviモードを表示する方法を知っている人はいますか? (プロンプトなどに含めることによって)

どのモードにあるかを視覚的に判断する方法はないと思いますが、動作を少し変更すれば問題ありません。

コマンドモードにしたい場合は、コマンドを入力する前にESCを押してください。

挿入モードにしたい場合は、コンテンツを入力する前にESCとiを押してください。

あなたはESCを何度も押すことになりますが、私が今まで会ったすべてのviユーザーはとにかくそれをします。

4
Bob Weber

ドキュメントを確認しましたが、現在のviモードを検出して表示する方法が見つからなかったと言わざるを得ません。私はあなたが楽しい驚きを持っていて、誰かが解決策を考え出すことを願っていますが、私は確かにあなたが求めることをする方法を見つけることができません。

これを行う方法はあると思いますが、それは小さな煩わしさのために大規模なやり過ぎであり、この質問をしたときにあなたが考えていたものではないと思います。これが本当なら、今読むのをやめて、あなたの人生を楽しんでください。

OTOH、これが本当にあなたのペットのぞき見であり、それがあなたを狂わせているなら、そしてあなたは本当に絶対にこの問題を叩きたいのなら、これはそれをどうやって行うかについての私の考えです:

  1. W.リチャードスティーブンスによる NIX(R)環境での高度なプログラミング のコピーを入手してください。
  2. Streams およびターミナルI/Oに関する章をお読みください。
  3. ソースコード を前述の本にダウンロードします。この本には、端末に階層化できるストリームの例が含まれています。
  4. Escキーの組み合わせ(または両方のモード変更キーの押下)の処理を実装し、現在の行のベルまたはバックグラウンド操作を介してそれを示します。

簡単に言うと、UnixはターミナルI/Oを、デバイスドライバーとユーザープロセスの間の全二重I/Oストリームとして実装し、モジュールを挿入することができます。スタックとして編成されているため、必要な数のストリームを階層化できます。注入されたストリームの合計により、ターミナルI/Oの動作が作成されます。

文字が入力されると、最初のモジュールがそれを検査して渡します(必要に応じて)。応答が反対方向に到着すると、再び検査して渡す機会があります。これは、Ctrl-Cが通常の文字キーよりも高いレベルで処理される方法です。

ストリームモジュールを実装するバイナリを作成できます。このバイナリは、呼び出されるとフォアグラウンドでサイレントに実行され、すべてのキーストロークを検査して渡し、気になるキーストロークに対して好みのアクションを実行します。すべての目的と目的で、シェルで作業しているように見えます。ああ。このバイナリは、.tcshrcの最後の(または最初の、または任意の)行で呼び出すことができ、そこにあることすらわかりません。

良い入門書があります ここ 、しかし私はこのトピックについて多くを見つけることができませんでした、おそらくそれがその素数を過ぎているためです。

3
user4358

このページ には、zshで必要なもの(およびそれ以上)を設定するかなり詳細なスクリプトがあります。おそらく、tcshで動作するように適合させることができます(私はそのシェルにあまり精通していません)。

2
redacted

この正確な問題を抱えている人(私のように)へ:私は stackoverflow で解決策を見つけました。どうやらreadlineにはこれに対するネイティブサポートがあるので、~/.inputrcに以下を追加するだけです。

set show-mode-in-Prompt on

そして、実際の文字の使用をカスタマイズするには:

set vi-ins-mode-string "custom-ins"
set vi-cmd-mode-string "custom-cmd"
1
ber532k

[〜#〜] so [〜#〜] の私の答えを見てください。 Bash 4.4/Readline 7.0はこの機能のサポートを追加し、暫定的にBash 4.3/Readline 6.3のパッチを適用したバージョンを github に公開しました。

0
Dylan Cali

tcshを使用したコマンドライン編集

コマンドラインを編集するには、主に2つのモードがあります。
最も一般的に使用されている2つのテキストエディタ、Emacsとviに基づいています。

viバインディングでは、insertcommandを切り替える必要があります。 =モード;
各モードで異なるコマンドが役立ちます。

viモードには、insertモードとcommandモードの2つのサブモードがあります。

  • デフォルトモードは挿入です。
  • Escを押すと、モードを切り替えることができます。
  • または、コマンドモードでは、
    「a」(追加)または「i」(挿入)と入力すると、挿入モード
    に戻ります。

tcshカスタマイズ ページに関するその他の注意事項はすでに上記にリンクされています。

0
nik

私はまったく同じ問題を抱えていましたが、偶然に解決策を見つけました。このスレッドは古いですが、解決策を提供している他のWebサイトが見つからなかったので、このスレッドへの投稿は問題ないと思います。

ターミナルプログラムまたはシェルの設定をリセットするだけです。現在PuTTYを使用していますが、保存した接続の保存した設定を削除し、保存したセッションを再作成しました。チャームのように働いた。

お役に立てれば!

0
J.j. Loneman