น้อยไม่เน้นการค้นหา


11

มีบางอย่างเกิดขึ้นดังนั้นฉันจึงไม่เห็นไฮไลท์น้อยลงอีกแล้ว ฉันพยายามแล้ว:

  • ใช้ขั้วที่แตกต่างกัน
  • ใช้-gตัวเลือก
  • ทำให้แน่ใจว่า-Gไม่มี
  • ^ K ขณะค้นหา
  • ESC-U

ไม่มีอะไรช่วย

ฉันทำงานใน Ubuntu 12.10 บนเดสก์ท็อป i3 $TERM=screen-256. เมื่อฉันใช้^ ALT 1เพื่อเปลี่ยนเป็นTTY1และman manฉันเห็นได้ไหมว่ามันเน้นทั้งพารามิเตอร์มนุษย์และรูปแบบการค้นหา

ฉันจะแก้ไขอะไรได้อีก


1
สิ่งใดที่ตั้งค่าตัวแปร TERM เป็นค่านั้น คุณใช้หน้าจอหรือไม่
Dennis

คำตอบ:


3

การไฮไลต์ใน TTY1 ทำงานเนื่องจากตั้งค่าตัวแปร TERM เป็นค่าที่เหมาะสม

หากคุณกำลังใช้หน้าจอ:

เปลี่ยนตัวแปร TERM เป็นค่าที่เหมาะสม (เช่นหน้าจอหรือหน้าจอ 256 สี ) ตรวจสอบส่วนบุคคลของคุณ~ / .screenrcหรือทั้งระบบ/ etc / screenrcและแก้ไขบรรทัดที่เกี่ยวข้อง

ในรุ่นของฉันน้อยกว่าหน้าจอค่า256ควรส่งผลให้เกิดข้อผิดพลาด:

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

หากคุณไม่ได้ใช้หน้าจอ:

หน้าจอ *เพียง แต่ได้รับการตีความอย่างถูกต้องโดยหน้าจอ

ค่าที่ถูกต้องสำหรับ TERM นั้นขึ้นอยู่กับเทอร์มินัลอีมูเลเตอร์ของคุณและโดยปกติควรจะตั้งค่าไว้ ค่าเริ่มต้นของ Ubuntu สามติดตั้งเลียนแบบขั้วคือxterm

ปฏิบัติ

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

ตรวจสอบว่าค่าของ TERM ถูกแทนที่ในไฟล์การกำหนดค่าของเชลล์หรือไม่


3
echo $ TERM ใน TTY1 เรียกคืน 'screen-256 color' อีกครั้ง แต่การเปลี่ยน TERM เป็น 'xterm' จะเน้นอีกครั้ง
majkinetor

2

นี่มันน่ารำคาญ เกิดขึ้นที่นี่คืออะไร? (ใน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 เอกสารลำดับการควบคุมหรือหนึ่งสามารถเล่น ๆ ด้วยตนเองโดยลำดับเพื่อดูว่าภายใต้การ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

การค้นพบนี้ให้ตัวเลือกบางอย่าง; เราอาจกำหนดค่าเทอร์มินัลเพื่อแสดงข้อความตัวเอียงหรือแทนที่จะพยายามทำให้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[7mและscreen \E[3m; ตามterminfo(5)นี้คือ "โหมด standout" และจับคู่กับสิ่งที่ตรงกันข้าม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.