weniger hebt die Suche nicht hervor

11

Es ist etwas passiert, sodass ich nicht mehr weniger Highlights sehe. Ich habe es versucht:

  • mit verschiedenen Terminal.
  • mit -gOption
  • Stellen Sie sicher, dass -Ges nicht da ist
  • ^ K während der Suche
  • ESC- -U

Nichts hilft.

Ich arbeite in Ubuntu 12.10 auf einem i3-Desktop. $TERM=screen-256. Wenn ich ^ ALT 1zu TTY1 wechsle und dies tue, man mankann ich sehen, dass dort sowohl Man-Parameter als auch Suchmuster hervorgehoben werden.

Was kann ich noch tun, um das Problem zu beheben?

Majkinetor
quelle
1
Was hat die Variable TERM auf diesen Wert gesetzt? Verwenden Sie Bildschirm?
Dennis

Antworten:

3

Die Hervorhebung in TTY1 funktioniert, da die Variable TERM auf einen geeigneten Wert gesetzt wird.

Wenn Sie den Bildschirm verwenden:

Ändern Sie die TERM-Variable auf einen geeigneten Wert (z. B. screen oder screen-256color ). Überprüfen Sie Ihr persönliches ~ / .screenrc oder das systemweite / etc / screenrc und korrigieren Sie die entsprechende Zeile.

In meiner Version von less sollte der Wert screen-256 tatsächlich zu einem Fehler führen:

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

Wenn Sie keinen Bildschirm verwenden:

Der Bildschirm * wird nur vom Bildschirm richtig interpretiert.

Der richtige Wert für TERM hängt von Ihrem Terminalemulator ab und sollte normalerweise von diesem festgelegt werden. Die Standardeinstellung der drei vorinstallierten Terminalemulatoren von Ubuntu ist xterm .

Ausführen

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

die Überprüfung, ob der Wert von TERM in den Konfigurationsdateien Ihrer Shell überschrieben wird.

Dennis
quelle
3
echo $ TERM in TTY1 wiederholt auch 'screen-256 color'. Wenn Sie jedoch TERM in 'xterm' ändern, wird dies erneut hervorgehoben.
Majkinetor
2

Nun, das ist nervig. Was geht hier vor sich? (in tmuxunter iTerm.app)

$ echo test > test ; echo $TERM
screen

und dann mit etwas Aufnahme

$ 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 ...

und jetzt schauen wir uns die verwendeten Codes an

$ 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
$ 

Die 1b 5b ...Codes können verständlicher gemacht werden, indem die Dokumentation der xterm-Steuersequenzen konsultiert wird, oder man kann manuell mit den Sequenzen herumspielen, um zu sehen, welche unter TERM=xtermdie Hervorhebung verursacht

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

Was der TERM=screenFall nicht tut, ist gemäß den Kontrollsequenzdokumenten eine Umkehrung

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

und in der Nähe von diesem Dokument können wir erfahren, dass das screenTerminal \033[3mfür kursiv und \033[23m nicht kursiv ist .

Dieser Befund gibt einige Optionen; Wir könnten das Terminal so konfigurieren, dass kursiver Text angezeigt wird, oder wir könnten stattdessen versuchen, das screenTerminal dazu zu bringen, die inversen Codes anstelle von Kursivschrift zu verwenden. (Einige Stöbern in den less(1)Dokumenten zeigten keine eindeutigen "Inverse statt Kursiv" -Knöpfe zum Fummeln.) (Einige Terminals bieten möglicherweise Unterstützung für die Übersetzung von X nach Y, überprüfen Sie die Terminal-Dokumente auf Details.) (Oder Sie könnten Probieren Sie einen anderen Terminalemulator aus und sehen Sie, was dieser macht ...)

Wow kursiver Text ist hässlich . Versuchen wir stattdessen, die Codes screenzu ändern, um sie umzukehren. Dies betrifft offensichtlich die terminfo(oder möglicherweise termcap) Datenbank, die über exportiert infocmp(1)und von kompiliert werden kanntic(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,
$ 

Also würde ich vermuten smso, dass das xtermverwendet wird, wenn es verwendet \E[7mund screen \E[3m; demnach terminfo(5)ist "herausragender Modus" und wird mit dem Rückwärtsgang gepaart rmso; Lassen Sie uns diese ändern, was xtermverwendet wird ...

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

Hey, das sieht jetzt besser aus (muss aber auf allen Hosts für die screenoder welche terminfoDatei auch immer gemacht werden ...)

Thrig
quelle