マウスを使用してlessのテキストを適切に選択できますか?


9

に次の行を追加できることがわかりました~/.vimrc

set mouse=a
:vmap <C-C> "+y

これには、マウスで(つまり、ビジュアルモードで)テキストを選択し、実際のテキストをCtrl+でXクリップボードにコピーできるという効果がありますc。これはターミナルからのデフォルトのコピーとは異なります。これは、ターミナルが見るものではなく、私がコピーしている実際のテキストです。たとえば、テキストにタブがある場合、以前はスペースとしてコピーしていました。

同じように動作しないようにする方法はありますか?つまり、表示しているテキストファイルの内容をそのままコピーできますか?


gpmで試しましたか?
YoMismo 2014年

@YoMismoいいえ。上記の例では、ターミナルエミュレータにタブではなくリテラルスペースが含まれているため、それがどのように役立つかはよくわかりません。
スパーホーク2014年

X端末ではなく、コンソールで作業していると思いました:-/
YoMismo 2014年

回答:


5

少ないためのタスクではありません

いいえ、
lessには最初からカーソルがないため、直接実行できるとは思いません。
選択するテキストの最初と最後に移動する必要があります。
lessは文字レベルのナビゲーションに適したツールではありません。

タブは既に展開されています

キーshiftとマウスを使用して選択を行うことができます。これは、lessではなく端末によって処理されます。しかし、ターミナルはスペースとタブがどのように配置されているのかを認識していません-内部的にタブの解釈を行わず、通常の " "文字のみを画面に書き込みます。

以下のようなツールがありscreentmux そしてbyobuこの領域で印象的なものの多くを行うことができます。私はチェックしませんでしたが、これらのターミナルマルチプレクサーにはそれを回避する方法がなく、結局ターミナルであり、同じように動作すると思います。

vimを使用する

でファイルを表示している場合lessは、適切な解決策があります。
キーvを押しlessて現在のファイルを開きvimます。$EDITORvim

回避策はありますが、これはパイプラインなどからstdinを表示するときには機能しません。

少なくともマウスのスクロール

ただし、少なくともマウスホイールでスクロールできます。

これはデフォルトで有効になっているように見えますが、マウスホイールイベントは別のオプションによって抑制されます。

簡単なテストについては、次を試してください:

LESS=-r man less

オプション-X--no-init)はスクロールをブロックします-環境変数のLESS内容を確認してください:

$ echo $LESS

SUによると、オプション-q--quiet--silent)も問題を引き起こします:bashとgnome-terminalを使用してマウスホイールのスクロールを少ないページャーにする方法は?


すばらしい答えです。vキーは素晴らしいです!(私はそれをパイプラインでも機能させるためにクールな回避策の自由を取りました。)端末エミュレーター(ターミネーター)でFWIWテキストを選択するときにシフトを保持する必要はありません。
スパーホーク2014年

@Sparhawkねえ、回避策は少なくとも同じくらい素晴らしいです!
Volker Siegel

2
さらに、ホールセールのvimpager代わりに使用できるポケットベルがありますless。実際にはvim、小さなスクリプトにラップされて使用されます。
HalosGhost 2014年

1
@HalosGhostありがとうございます。vimpagerかなりクールに見えますが、私はヤンキングに問題がありましたv
スパーホーク2014年

@Sparhawk技術的には、使用されるvimrcを比較するか、正常vimpagerに機能するまで通常のvimrcの一部を使用できます。(起動vim時にすべてのプラグインをアクティブ化しないように頑張っていvimpagerます...)
Volker Siegel

3

次のようにless入力して、に表示されている一番上の行をX11 CLIPBOARD選択にコピーできますless

|.head -n1|xclip -sel c<Enter><Enter>

これは、より少ないバッファーを最上行から.マーク(実際には画面全体のコンテンツ)までhead -n1|xclip -sel cコマンド(その最初の行をCLIPBOARD選択に格納するため)にパイプします。

特定のキーを押したときにその文字列を貼り付けるか、lessキーバインディングのキーまたはキーの組み合わせにバインドするようにターミナルエミュレータを構成できます。たとえば、それをバインドするにはAlt+C

printf '%s\n' '#commands' '\ec pipe .head -n1|xclip -sel c\n' | lesskey -

ただし、Enterその後に「| done(press RETURN)」プロンプトを確認するために押す必要があります。

を使用するとxterm、現在の画面からコピーする行をCtrl+Alt指示する選択を拡張するときに押し続けると、たとえばここで新しい選択モードを定義することもできlessます。

次のlesspasteようなスクリプトを記述します。

#! /bin/sh -
start=${1%%";"*}
end=${1#*" "}
end=${end%";"*}
head -n "$((end))" | tail -n "$((end - start + 1))" | xclip -sel c

そして、xterm変換テーブルを定義します(ここではテスト用のコマンドラインですが、Xリソースファイルに追加する必要があります)。

xterm -xrm 'XTerm.VT100.translations: #override \
  Meta Ctrl<Btn1Down>: select-start()\n\
  Meta Ctrl<Btn1Motion>: select-extend()\n\
  Meta Ctrl<Btn1Up>: select-end(SECONDARY) \
    insert-formatted("|.lesspaste '\''%P %p'\''\n\n", SECONDARY)'

次に、マウスをCtrl+Alt押したままドラッグして貼り付ける線をマークします。ボタン1を離すと、xtermは、現在の画面をlesspaste1つの引数(y1;x1 y2;x2)として渡された開始座標と終了座標でスクリプトにパイプするように指示します。

(もしそれが正しく動作しない可能性があることに注意lessして呼び出される-sことによって呼び出されたときに典型的であるように(空白行を絞るmanに供給され、入力として、)lesspasteであろうない行番号オフセットが間違っているとすることができるように(その空白行を圧迫しています)) 。


@Sparhawk、編集を参照してください。
ステファンChazelas

うまくいかないようです。クリップボードに新しいものはありません。されたlessフィードバックのいずれかの種類を与えることになって?j私には何もしないようです。
スパーホーク2015年

@Sparhawk、のカスタムキーバインディングはありますか、デフォルトのキーバインディングで1行()だけ下lessjスクロールしforw-lineます(実際にはJforw-line-force)のほうがよいので、編集します)。|いくつかのフィードバックを与える必要があります。(マークを要求してから、入力するコマンドを入力します)。
ステファンChazelas

いいえ、しませんでしたが、1ページより短いテキストでテストしていたため、おそらくそれjが何もしなかったのです。最初のオプションが機能します(+1)。2番目のオプションは、いくつかの注意点があるため、かなり複雑に思われるため、試さなかった。私にvは十分だと思います。
Sparhawk
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.