
2015年4月編集:同じ疑問をお持ちの方は、こちらもチェックしてみてください。http://xiki.org/
これはターミナルの動作方法ではないことは承知していますが、以前のコマンド出力からターミナル ウィンドウの履歴にすでにあるテキストを使用する (コピー、変更など) 簡単な方法があればいいのにと思うことがよくあります。
私は次のように想像しました:
私は bash シェルでコマンドを入力しようとしていましたが、すでに画面上に数行表示されているものを入力する必要があることに気付きました。マウスで選択することもできますが、それは嫌です。今私が本当に望んでいるのは、ターミナル全体が巨大な Vim バッファになることです。プロンプト、入力したコマンド、それらのコマンドの出力など、すべてです。そして、数行上にジャンプし、少し編集し、テキストをヤンクします。その後、bash シェル モードに戻り、ヤンクしたものを現在のコマンド ラインに貼り付けます。
いくつかの選択肢があることはわかっています:
当然、必要なテキストを何らかのコマンドの出力から直接ファイルにパイプするか、次のコマンドに直接パイプします。ただし、そのためには、事前に計画を立てるか、履歴からコマンドを再実行する必要があります (呼び出し間で出力が変更されないと仮定)。
マウスを使ってコピーするテキストを選択します。面倒で、面倒で、そんなことをしなければよかったのにと思います (ここは GUI の StackExchange サイトではありませんよね? =)
私の (Mac OS X) ターミナル アプリケーションの「テキストをエクスポート...」オプションを使用して、ターミナル テキストをファイルに保存します。次に、ファイルを開いて操作します。ほぼ完了ですが、なぜディスク上のファイルに保存する手順を実行するのでしょうか?
では、質問です。このような状況ではどうしますか? このシナリオで役立つトリック、ツール、シェル機能はありますか? 諦めてマウスを使用するか、入力する必要があるものを再入力しますか?
問題は私が「UNIX 方式」で物事を行っていないことにあるのかもしれませんが、これは 2010 年であり、カーソルから数行離れたテキストを簡単にコピーできないのでしょうか?
答え1
emacsでは、Mxシェル以前の出力の編集を処理します。通常のバッファのように、以前のコマンドの出力やバッファの任意の部分を簡単にコピーして貼り付けることができます。vim に相当するものがあるはずです。
答え2
tmux (ターミナル マルチプレクサ) では、Ctrl+A-[ を押すと Vi バッファ モードに切り替わり、画面内を移動したり、バッファを前後にスクロールしたり、テキストをコピーしたりできます。デフォルトのショートカットは実際には Ctrl+B-[ ですが、これは明らかに再構成されることを意図していました。また、デフォルトのバッファ モードは Emacs ですが、Vi に設定することもできます。
tmux をチェックしてください。これは本当に優れた最新のターミナル マルチプレクサです。バッファを操作する以外にも、複数のウィンドウで画面を分割したり、複数のターミナルから同じセッションに接続したりできます。究極の利便性のために、実際のシェルが何であるかを伝えれば、ログイン シェルにすることもできます。
OpenBSD では、tmux は基本システムの一部にもなりました。
詳細についてはtmuxのマニュアルページを参照してください。また、スクリーンショットもご覧ください。http://tmux.sourceforge.net/
答え3
スクリプトを使用すれば (毎回フラッシュされるようにするには -f を使用します)、すべての出力をファイルに保存できます。
ターミナルマルチプレクサ(screen、tmuxなど)を使用します。たとえば、screenの場合 http://web.mit.edu/gnu/doc/html/screen_11.html#
コマンド: copy コピー/スクロールバック モードに入ります。これにより、現在のウィンドウとその履歴からテキストを貼り付けバッファにコピーできます。このモードでは、vi のようなフルスクリーン エディタがアクティブになり、コントロールは以下のように表示されます。
他の端末マルチプレクサには、より高度な機能が搭載されているはずです。
答え4
私は urxvt (rxvt-unicode) を使用していますが、urxvt-keyboard-select というパッケージがあります。urxvt をインストールできる場合は、これがまさに必要なパッケージかもしれません。Archlinux パッケージ情報 (ポインターを含む) は、次の場所にあります。