マウスを少なくしてテキストを正しく選択できますか?

マウスを少なくしてテキストを正しく選択できますか?

次の行を~/.vimrc

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

その効果は、マウスを使用して(たとえばビジュアルモードで)テキストを選択し、Ctrl+を使用して実際のテキストをXクリップボードにコピーできることですc。これは、端末に表示されるテキストではなく、コピーする実際のテキストであるという点で、端末のデフォルトのコピーとは異なります。たとえば、テキストにタブ文字が含まれている場合、以前はそれをスペースにコピーしました。

少数の人が同じように振る舞うようにする方法はありますか?つまり、私が見ているテキストファイルの内容をそのままコピーできますか?

答え1

課題も少なくない

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

タブが広がる

キー入力とマウスを使用して選択すると、shift端末で処理されます。しかし、端末は空白とタブがどのように配置されているのかわかりません。タブを内部的に解釈し、画面に一般的な文字を書きます。

この領域で多くの印象的なタスクを実行することができる、screenなどtmux のツールがあります。byobu確認しませんでしたが、これらのターミナルマルチプレクサ(最終的にターミナル)を使用すると、この問題を解決する方法がないと仮定して同じように機能します。

vimを使う

にファイルを表示したい場合は、less良い解決策があります。 in
キーを押して現在のファイルを開きます。などがに設定されているとします。vlessvim$EDITORvim

パイプなどの標準入力を表示しても機能しません。解決策

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

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

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

迅速なテストのために、以下を試してください。

LESS=-r man less

オプション-X--no-init)はスクロールを防ぎます。環境変数LESSに含まれる内容を確認してください。

$ echo $LESS

主張によると、オプション-q--quiet、)も問題を引き起こす可能性があります。--silentSU:bashとgnome-terminalを使ってマウスホイールスクロールを呼び出す方法は?

答え2

less次のように入力して、ディスプレイの一番上の行をX11 CLIPBOARD選択項目にコピーできますless

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

これは、一番上の行から.マーカー(実際に全画面コンテンツ)に少ないバッファをコマンドhead -n1|xclip -sel c(クリップボード選択の最初の行を保存するため)に送信します。

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

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

Enterただし、その後「|DONE(Press RETURN)」を押すと確認するように求められますのでご注意ください。

を使用すると、選択範囲を拡大しながら押し続けるなど、xterm新しい選択モードを定義して現在の画面からコピーする行を通知するなどの操作を実行することもできます。Ctrl+Altless

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はlesspaste開始座標と終了座標を1つの引数(y1;x1 y2;x2)に渡し、現在の画面をスクリプトにパイプするようにLessに指示します。

less(空白行を絞り込むために呼び出すと正しく機能しない可能性があります-s(通常manlesspasteいいえ空の行が圧搾されます(したがって、行番号のオフセットが間違っている可能性があります)。

関連情報