10

わかりました、これは単純だと確信していますが、それは私を夢中にさせています。私は最近、少し時間をさかのぼって Redhat 9 を使用しなければならなかったプログラムに取り組みました。テキストを新しい行に折り返すのではなく、画面を右にスライドさせます(コマンドの左側を切り取ります)。コマンドラインから直接前のコマンドを簡単にコピーして貼り付けることができないため、これは私にとって困難です。履歴を見て、そこからコマンドを貼り付ける必要があります。ご参考までに、私は多くのコマンドライン awk スクリプトを実行しているため、行が非常に長くなります。

入力しているコマンドの右側に表示を移動する代わりに、コマンド ラインを強制的に折り返す方法はありますか?

マンページのオプションを調べてみましたが、うまくいきませんでした。

私は走っています:

  • XFree86 4.2.99.903(174)
  • KSH 5.2.14。

ありがとう。

4

6 に答える 6

6

やったman ksh

あなたはしたいですset -o multiline

からの抜粋man ksh:

複数行:

組み込みエディターは、画面の幅よりも長い行に対して、画面上で複数の行を使用します。これは、すべての端末で機能するとは限りません。

于 2008-09-30T12:41:02.753 に答える
4

eval $(resize) はそれを行う必要があります。

于 2009-11-24T18:44:15.273 に答える
2

可能であれば、\ を追加してコマンドを複数行に分割してみてください。

$ mycommand -a foo \
  -fバー\
  -c差分
于 2008-09-26T20:36:29.227 に答える
2

簡単な答えは次のとおりです。

$ set -o multiline

NetBSD 6.1 に同梱されている ksh のように、5.12 より前の ksh には、このオプションがありません。通常は emacs である現在の Interactive Input Line Editing モードをオフにする必要があります。

$ set +o emacs

これにより、タブ補完や「上矢印」キーを使用して前のコマンドをロールバックするなど、多くの機能が完全にオフになります。

どうにかして emacs モードに慣れようと決心した場合は、^a が行頭に移動し ("Home" キーは機能しません)、^e が行末に移動することを覚えておいてください。

于 2013-09-12T02:13:05.690 に答える
0

これは一種の実用的な答えですが、それが私にとって問題である場合、私は通常次のようなことをします。

strings ~/.history | grep COMMAND

また

strings ~/.history | tail

(履歴ファイルには少しのバイナリデータが含まれているため、「文字列」)

于 2008-09-30T12:55:41.737 に答える
0

シェルを強制的に折り返す方法はわかりませんが、なぜそんなに長い行を書くのかと尋ねたいと思います。awk スクリプトでは、スクリプトを一重引用符で囲み、必要な場所で行を分割します。スクリプトで一重引用符が必要な場合にのみ注意が必要です。一重引用符と二重引用符の両方が必要な場合は悪魔的です。実際には、ルールは非常に単純です。単一引用符を使用してスクリプト全体をラップし、スクリプト内で単一引用符が必要な場合は、'\''. 最初の引用符は、前の一重引用符で囲まれた文字列を終了します。バックスラッシュと一重引用符は一重引用符になります。最後の一重引用符は、新しい一重引用符で囲まれた文字列を開始します。eval などのためにこれらの文字をエスケープする必要がある場合は、非常に面倒です。

もう 1 つの質問は、エディターを起動しない理由です。私は根っからの vim マニアなので (わかりました - 私は 20 年以上 vi を使っているので、代替手段よりも簡単です)、Korn シェルを vi モード (set -o vi) に設定しています。そして、私が入力したものに対してエディターを起動するために escape-v を実行できます。

于 2008-09-27T05:39:57.517 に答える