web-dev-qa-db-ja.com

端末から複数ページのテキストをクリップボードにコピーする方法は?

自分のマシンでソフトウェアのmanページを表示していて、そのテキストの一部をコピーして貼り付ける必要がありましたが、テキストは1ページをはるかに超えていました。出力をファイルに送り、必要なテキストをコピーするためにgeditなどのUIベースのソフトウェアを使用できることを知っています。しかし、これはターミナルから行うことができますか?

Josephはコマンドラインメソッドを提案しました(少し複雑で、Linuxの正規表現はまだ上手ではありません)。しかし、私がまだ端末上にいる間にそうする方法があるかどうか疑問に思いますマウスを使用して

一般的な回答が得られるといいのですが、私はUbuntuを使用しています。

13

私はいくつかの不完全な、しかしおそらく有用なアイデアを持っています。

方法1-マウス。

端末のスクロールバーを使用します。

詳細(xtermを想定して、他の端末では調整が必要になります。)

  1. スクロールバーが有効になっていない場合は有効にします。 (xtermでは、Ctrl + Button2で表示されるメニューにあります。)
  2. less-cオプションで実行されていないことを確認してください(このオプションはLESS環境変数で有効になっていますが、これにより、実行しようとしていることが妨げられます。オフにするには、-cと入力する必要があります。)
  3. 好きなlessコマンドを使用して、上下にスクロールして、コピーする最初の行を画面に表示します。
  4. triple-Button1は、選択した開始行を選択します。
  5. コピーする最後の行が画面に表示されるまで下にスクロールします。 /検索ではなく、スペースバーまたは他の単純なスクロールキーのみを使用する必要があります。ここでのポイントは、lessを取得してすべての行をターミナルに送信し、コピーできるようにすることです。
  6. 選択を終了するには、選択したエンドラインのButton3。

考えられる問題:スクロールバックバッファーが十分に大きくない可能性があります。 xtermsaveLinesリソースまたは-slコマンドラインオプションを使用して変更できますが、すでに実行中のxtermで変更する方法がわかりません。

方法2-非マウス。

less|(パイプ)コマンドを使用して、テキストをxclipに送信します。

詳細:

  1. 好きなlessコマンドを使用して、上または下にスクロールして、コピーしたいlast行を画面の上部に配置します。最後までコピーする場合は、このステップと次のステップをスキップできます。
  2. m(マーク)コマンドを使用して、選択した終了位置にマークを設定します。マークはそれ自体が便利な機能であり、viからすでに知っているはずですが、知らない場合のために: mx マークを設定します。xは任意の文字にすることができます。 'x 後でそこに戻ります。
  3. 次に、上にスクロールして、コピーする最初の行が画面の一番上になるようにします。
  4. Pipeコマンドを使用します。 |x これにより、外部コマンドを入力するためのプロンプトが表示されます。 xは、mコマンドで使用したのと同じマーク文字であるか、または「最後まで」の場合は$である必要があります。そこにxclipと入力します。

Manページ全体をコピーする単純なケースは、次のようになります。 g|$xclipEnter

警告(つまりちょうど私に起こった恐ろしいこと):xclipは半バックグラウンドになります、 lessプロセスグループの一部として実行されます。 lessを一時停止し、同じ端末で別のジョブを開始して貼り付けようとすると、機能しません。次に、後でman/lessジョブをフォアグラウンドにすると、突然貼り付けが行われます。これはxclipバグと考える必要があります...

9
user41515

tmuxscreenのようなターミナルマルチプレクサーは通常、このような機能を備えており(つまり、スクロールバックバッファーの一部をファイルに保存したり、コマンドにパイプしたり)、通常はとにかくそれらを使用することをお勧めします。そのため、これらの1つを確認することをお勧めします。

3
peterph

概説したように Nixcraftで

  1. xclipを取得:

    Sudo apt-get install xclip 
    

    または

    yum install xclip
    

    rPMベースのシステム。

  2. man man | your_magic_here | xclip -selection clipboard
  3. Ctrl+V 心ゆくまで。削除できます-selection clipboard代わりに、中マウスクリックで貼り付けを選択します(プライマリ選択と呼ばれます)。

ご了承ください your_magic_hereは、特定のユースケースに応じてマニュアルページの必要な部分を選択するテキストフィルター(sed/awk/Perl/...)のプレースホルダーです。 、それはあなたが説明しなかったので、私は例で特定することはできないと思います。

2
Joseph R.

|を使用します(パイプ)コマンドは、Wumpus Qによって回答されたように、マーク付きで少なくなっています。Wumbleyは 2番目のオプション を使用していますが、Teeを使用してリダイレクトして既存のファイルに追加しています目的のためにすでにそこにあります:

|tee >> ~/helpaggregator.txt

私は通常、新しいコマンドを学ぶときに相談する必要があり、それらを統合しておくのが好きなので、既存のファイルをお勧めします。さらに、タブ補完が便利です。

0
taatparya

端末プログラムによって異なりますが、ほとんどの端末プログラムには、選択したテキストを保存する機能がありません。

LXTerminal、uxterm、Konsole、およびGNOMEターミナルはすべてこの「機能」を欠いているようですが、それを備えているものもあるかもしれません。端末プログラムのメニュー構造を見てください。「選択を保存」のようなものがあるかもしれません

0
Timo

lessのポケットベルとしてgnome-terminalおよびmanを使用すると仮定すると、次のことができます。

  • less for man-Xキーで実行して、代替画面を無効にします。例:LESS=-X man less

これにより、manの出力をターミナルエミュレータの履歴バッファに追加できます。詳細については、この回答を参照してください https://unix.stackexchange.com/a/38638/87918

  • コピーするテキストの最後のページまでスクロールします。 (スクロール中のすべてのテキストは、スクロール中に履歴バッファーに保存されます)
  • gnome-terminalでテキストを最後のページから最初にマウスで選択し、マウスをウィンドウの上端にドラッグします。テキスト選択の詳細なプロセスについて説明します ここ

これはGnomeターミナルでは機能しません。代わりに、マウスの左ボタンで選択を開始し、その間にマウスカーソルをウィンドウの端(またはウィンドウの外側)にドラッグします。 G-Tはスクロールして、選択範囲を拡大します。 G-Tのスクロールは十分に速いので、これはかなり便利で直感的なプロセスであり、おそらくxtermのスクロールよりも優れています。

  • これでテキストが選択されました(必要なページは何でも)。コピーして、どこにでも貼り付けることができます。
0
ks1322