lessは検索を強調しません


11

何かが起こったので、これ以上ハイライトが見えなくなりました。私はもう試した:

  • 別の端末を使用します。
  • -gオプションを使用
  • -Gそこにないことを確認する
  • ^ K検索中
  • ESC-U

何も役に立たない。

私は、i3デスクトップ上のUbuntu 12.10で作業しています。$TERM=screen-256TTY1^ ALT 1に切り替えて使用すると、manパラメーターと検索パターンの両方が強調表示されていることがわかります。man man

それを修正するために他に何ができますか?


1
TERM変数をその値に設定したのは何ですか?スクリーンを使用していますか?
デニス

回答:


3

TTY1の強調表示は、TERM変数を適切な値に設定するため機能します。

画面を使用している場合:

TERM変数を適切な値(たとえば、screenまたはscreen-256color)に変更します。個人の〜/ .screenrcまたはシステム全体の/ etc / screenrcを確認し、対応する行を修正します。

lessの私のバージョンでは、値screen-256は実際にはエラーになります:

WARNING: terminal is not fully functional
-  (press RETURN)

画面を使用していない場合:

画面には、*画面だけで正しく解釈されます。

TERMの正しい値はターミナルエミュレータに依存し、通常はそれによって設定されます。Ubuntuの3つのプリインストールされたターミナルエミュレータのデフォルトはxtermです。

実行する

grep -R TERM= ~/.* /etc 2> /dev/null

シェルの設定ファイルでTERMの値が上書きされるかどうかのチェック。


3
TTY1での$ TERMのエコーも 'screen-256 color'でした。ただし、TERMを「xterm」に変更すると、再び強調表示されます。
-majkinetor

1

まあこれは迷惑です。ここで何が起こっていますか?(tmux下にiTerm.app

$ echo test > test ; echo $TERM
screen

そして、いくつかの録音で

$ script withscreen
Script started, output file is withscreen
$ less -p test test
... q to quit and then exit the shell session ...

$ script withxterm
Script started, output file is withxterm
$ TERM=xterm less -p test test
... q and exit again ...

そして今、私たちは使用されているコードを見ます

$ grep test withscreen | hexdump -C
00000000  24 20 6c 65 73 73 20 2d  70 20 74 65 73 74 20 74  |$ less -p test t|
00000010  65 73 74 0d 0d 0a 1b 5b  33 6d 74 65 73 74 1b 5b  |est....[3mtest.[|
00000020  32 33 6d 0d 0a 1b 5b 35  3b 31 48 1b 5b 33 6d 74  |23m...[5;1H.[3mt|
00000030  65 73 74 1b 5b 32 33 6d  0d 0a 1b 5b 33 38 3b 31  |est.[23m...[38;1|
00000040  48 1b 5b 33 6d 74 65 73  74 20 28 45 4e 44 29 1b  |H.[3mtest (END).|
00000050  5b 32 33 6d 1b 5b 4b 0d  1b 5b 4b 1b 5b 3f 31 6c  |[23m.[K..[K.[?1l|
00000060  1b 3e 24 20 5e 44 0d 0d  0a                       |.>$ ^D...|
00000069
$ grep test withxterm | hexdump -C
00000000  24 20 54 45 52 4d 3d 78  74 65 72 6d 20 6c 65 73  |$ TERM=xterm les|
00000010  73 20 2d 70 20 74 65 73  74 20 74 65 73 74 0d 0d  |s -p test test..|
00000020  0a 1b 5b 37 6d 74 65 73  74 1b 5b 32 37 6d 0d 0a  |..[7mtest.[27m..|
00000030  1b 5b 35 3b 31 48 1b 5b  37 6d 74 65 73 74 1b 5b  |.[5;1H.[7mtest.[|
00000040  32 37 6d 0d 0a 1b 5b 33  38 3b 31 48 1b 5b 37 6d  |27m...[38;1H.[7m|
00000050  74 65 73 74 20 28 45 4e  44 29 1b 5b 32 37 6d 1b  |test (END).[27m.|
00000060  5b 4b 0d 1b 5b 4b 1b 5b  3f 31 6c 1b 3e 24 20 65  |[K..[K.[?1l.>$ e|
00000070  78 69 74 0d 0d 0a                                 |xit...|
00000076
$ 

1b 5b ...コードは、参照することにより、より明瞭にすることができるxtermの制御配列ドキュメントを、または1つは下を参照する配列を用いて手動周りいじることができTERM=xterm強調を引き起こしています

$ printf "\033[7mtest\033[27m\n"
test

そのTERM=screen場合は逆だコントロール配列のドキュメントごとに、行いません。

ESC [
     Control Sequence Introducer (CSI  is 0x9b).
...
CSI Pm m  Character Attributes (SGR).
...
            Ps = 7  -> Inverse.
...
            Ps = 2 7  -> Positive (not inverse).

そのドキュメントの近くで、screen端末\033[3mイタリック体であり、\033[23m Notません

この発見はいくつかのオプションを提供します。イタリック体のテキストを表示するように端末を構成するか、代わりにscreen端末にイタリック体の代わりに逆コードを使用ます。(less(1)ドキュメントを掘り下げると、「イタリック体の代わりにインバースを使用する」ノブが表示されませんでした。)(また、一部の端末は、XからYへの変換をサポートします。詳細については、端末のドキュメントを確認してください。)別の端末エミュレータを試してみて、それが何をするのかを見てください...)

うわー斜体テキストです醜いです。代わりに、screen使用するコードを逆に変更してみましょう。これには明らかにterminfo(または場合によってはtermcap)データベースが含まinfocmp(1)れます。tic(1)

$ TERM=screen infocmp > ti.screen ; TERM=xterm infocmp > ti.xterm
$ fgrep '\E[7' ti.xterm
        rc=\E8, rep=%p1%c\E[%p2%{1}%-%db, rev=\E[7m, ri=\EM,
        smir=\E[4h, smkx=\E[?1h\E=, smm=\E[?1034h, smso=\E[7m,
$ fgrep rev= ti.screen
        nel=\EE, op=\E[39;49m, rc=\E8, rev=\E[7m, ri=\EM, rmacs=^O,
$ fgrep '\E[3m' ti.screen
        smso=\E[3m, smul=\E[4m, tbc=\E[3g,
$ 

私が推測すると思いますのでsmsoことを考えると使用されているxterm用途\E[7mscreen \E[3m、これによるterminfo(5)と「スタンドアウトモード」であり、逆とペアになっていますrmso。それらをxterm使用するものに変更しましょう...

$ TERM=screen infocmp | sed -e 's/smso=[^,]*/smso=\\E[7m/;s/rmso=[^,]*/rmso=\\E[27m/' > foo
$ tic -o ~/.terminfo foo
$ rm foo

おいしそうになりました(ただし、すべてのホストでファイルを作成するscreen必要がありterminfoます...)

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