望ましくない変更行がある端末から長い単一行テキストをコピーする


14

locate ... | less 長いパスを出力します。実際には1行ですが、ターミナルでは複数の行として表示されます。

マウスでテキストを選択し、Ctrl+ Shift+ を押して、ターミナルからパスをコピーしますC。テキストファイルに貼り付けると、ターミナルに表示されるのとまったく同じように、テキストに不要な変更行が表示されます。

しかしlocate ... | less、時々、不要な行変更を導入せずに長いパス出力をコピーできることを覚えていますが、できないこともあります。別に何かをするかどうかはわかりません。

だから私は問題が発生しないことを確認する方法を疑問に思う?ありがとう!

私のOS:Ubuntu 12.04。

私の端末:Gnome Terminal 3.4.1.1



ただし、Ctrl + Shift + Cを使用すると、変更行をコピーせずに長い行をコピーできる場合があります。まだ別の問題だと思う。
ティム14

Q:この動作を制御する理由または方法についての詳細
slm

はい。私は(私が最も簡単な方法だと思います)のショートカットキーを使用して、端末のうち、テキストをコピーではなく、ファイルに出力を向けることによって
ティム・

振る舞いが他の方法に対して一方の方法である場合について、他に何かありますか?
slm

回答:


3

端末に表示されるもの(画面に収まるもののみ)をコピーする代わりに、実際のテキストをコピーします。外部ユーティリティのxselまたはxclipのいずれかを使用して(ほとんど同じ機能があり、この回答ではxselを使用します)、Xクリップボードとの間でデータをコピーします。クリップボードにコピーするには、目的のコンテンツを標準入力に渡します。クリップボードから貼り付けると、コンテンツは標準出力に書き込まれます。

以下では、|コマンドを使用して、コマンドを介して一連の行をパイプします。操作対象の最初の行までスクロールし、入力mmしてマークを設定し、最後の行までスクロールして、入力し|mxsel -b、を押しEnterます。2つのマークが事前に定義されています:^ファイルの先頭、ファイル$の末尾。したがって、ファイル全体をコピーするには、を使用します<|$xsel -b。1行をコピーするには、とを使用mm|mxsel -bEnterます。

-bクリップボードではなくプライマリ選択にコピーするオプションを削除します。


3

これの実際の動作は次のとおりです。

入っlessていて、非常に長い行のあるファイルがある場合、長い行を下にスクロールして上にスクロールすると、テキスト全体をコピーするときに複数行になります。その後、分割された行を端末の下部で下にスクロールし、再び上にスクロールすると、改行が再び削除されます。

視覚化:

ここに画像の説明を入力してください


2

テキストが端末に直接出力された場合、余分な改行改行なしで出力の行をコピーできます。 端末は、実際の回線の終端がどこにあるかを追跡できます。

しかし、行が、lessまたは同様のpagerプログラムによって出力された場合、端末は改行の場所を認識しません。ページャーは端末を文字のフルスクリーンとして使用し、端末に「これらの文字をそこに置く」ことや、スクロールなどの操作を指示します。しかし、ターミナルの場合、改行がどこにあるのかを確認する方法はありません。


2
改行をコピーする場合としない場合があることがわかりました。時間の経過とともに一貫性がありません。今日はlocate <something> | less、2つの異なるケースでCtrl-shift-cを押したときに両方が発生しました。
ティム14

Lessは通常、画面自体を描画するため、端末は行の終わりを認識しません。しかし、実際には、画面のハイトに適合する短いファイルに対しては何もしません。したがって、ケース間の違いは、異なるモードでは少ないということでした。(見てくださいecho $LESS、多分それ以下のための興味深いオプションがあります。)
Volker Siegel 14年

@Timこれは何年も私を悩ませてきました。たぶん@niknahの答えは原因を示唆していますか?私は頻繁に-Sモードを切り替えるので、多分それも悪化します。
ダングラヴェル16

1
@Tim:お使いのOSとそれ以下のバージョンでは当てはまらないかもしれないことを発見しました:コピーの動作は、lessでターゲットラインに到達した方法によって異なります。前方に検索している場合、コピーには折り返し改行が含まれません(つまり、元の長い行の内容がコピーされます)。ただし、ファイルを逆方向​​に検索してターゲット行に到達した場合、コピーには改行が含まれ、長い行が複数の個別の行に分割されます。MacとLinuxで一貫しているように思えます。
erik.weathers

2

less、折り返された複数行のテキストを選択してコピーすると、1行として表示されます。

を押しPgUpて同じテキストをコピーすると、複数行で表示されます。

PgDn大丈夫、矢印は大丈夫です。しかしPgUp、テキストは分割されます。


それがまさにこの行動の本当の原因ではありません。私の答えを参照してください:unix.stackexchange.com/a/445590/105308
bobbel

0

目標がコピー&ペーストである場合、またはのcat代わりに使用し、ターミナルはそれが表示されているのではなく実際にキャプチャします。lessmore

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