lessへのパイプと編集:「標準入力を編集できません」エラー。回避策は?


9

最近、でファイルをページングするとlessvEmacsでバッファを押して開くことができることを学びました。これは、環境変数が$EDITOR正しく設定されている限り機能します。私の場合は次のようになります。

export EDITOR='env TERM=xterm-256color emacs -nw'

上記は、実行するターミナル内でemacsをロードする機能を私に与えますless

ただし、コマンドをにパイプする場合、上記のトリックは機能しませんless。これを行うlessと、次のメッセージが表示されます。

Cannot edit standard input (press RETURN)

私の質問は、なぜこれが起こるのですか?しかし、最も重要なことは、それに何らかの回避策がありますか?


2
Emacsの実行中のコピーでファイルを編集できるようにするemacsclientの使用方法を学ぶ必要があります。Emacsは最速の起動エディタではありません。
cjm

なぜ私の編集をロールバックしたのですか?タイトルは問題ではないのですか?
John

1
@ジョンさん、申し訳ありません。編集内容は表示されませんでした。タイトルを編集して、この問題の回避策に主に関心があることを明確にしました。タイトルはそのままだと思いますPiping into less and editing: “cannot edit standard input” error. Workarounds?。なぜそう思わないのですか?
Amelio Vazquez-Reina

それは理解できます。エラーが発生した理由を尋ねている場合は、回避策が必要であることは明らかです。
John

私は同意しますが、これまでで最も投票された回答はwhy唯一ではなくに対応しているworkaroundsため、強調を追加しました。
Amelio Vazquez-Reina

回答:


5

すでに述べたように、入力ストリームを編集することはできません。

回避策は非常に明白ですストリームをファイルからlessファイルに保存し、保存したファイルを開きます。表示中にそれを行うには、を押しsてファイルの名前を入力します。次にless、ファイルを終了して手動で開くか、まだ内からless:e保存したファイルの名前を入力して指定します。


15

適切な回避策は、出力をlessからエディターにパイプすることです。たとえば、「echo foo | less」の後に次のことができます。

g|$vim -

gファイル/入力の最初の行にジャンプし、|「パイプ」アクションを呼び出し、$マーク(「終了」)の後に、範囲をパイプするコマンドが続きます(vim -この場合、「-」はstdinから入力を読み取る)。


1
素晴らしいです、ありがとう!
Simon Pickup

5

それはまさにそれが言ったことを意味します-この方法で(からless)ディスク上にあるファイルのみ編集できます。プロセスの出力をパイプ処理した場合、そのプロセスSTDOUTSTDINforに入りlessます。編集するファイルはありません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.