ฉันจะเก็บเนื้อหาที่ฉันอ่านจากมนุษย์หลังจากที่ฉันเลิกได้อย่างไร


24

ดังนั้นเราใช้man whateverเพื่อรับการใช้งานและข้อมูลอื่น ๆ เกี่ยวกับwhateverคำสั่งเมื่อพบส่วนของข้อมูลที่เกี่ยวข้องฉันต้องการออกจากmanคำสั่งด้วยข้อมูลที่เหลืออยู่บนหน้าจอ ดังนั้นฉันสามารถพิมพ์คำสั่งต่อไปกับผู้ตัดสินด้านบน แต่คำสั่งจบการทำงานหน้าจอทั้งหมดในการกู้คืนหน้าจอเก่าที่จะคล้ายกันman vimมีวิธีที่จะบรรลุเป้าหมายนี้หรือไม่?


ที่เกี่ยวข้อง: serverfault.com/questions/84534/…

คำแนะนำทั้งหมดนั้นดี แต่คุณสามารถเปิดหน้าต่างที่สองเพื่อดูหน้าคนได้ และอาจมีผู้ชมหน้า GUI ด้วยเช่นกัน
Barmar

คำตอบ:


38

ฉันเชื่อว่านี่ไม่ได้เกี่ยวกับmanตัวเองมากนักแต่เกี่ยวกับเพจเจอร์ที่คุณเลือก ( PAGERตัวแปรสภาพแวดล้อม) รวมกับเทอร์มินัลที่ใช้งานอยู่

ฉันคาดเดาเพจเจอร์ของคุณน่าจะเป็นless(เพจเจอร์เริ่มต้นปกติในปัจจุบันและเหมาะสมกับคำอธิบาย)

lessมีตัวเลือก-Xที่อาจทำให้คุณมีพฤติกรรมตามแนวของสิ่งที่คุณกำลังมองหา

   -X or --no-init
          Disables sending the termcap initialization and deinitialization
          strings  to  the  terminal.   This is sometimes desirable if the
          deinitialization string does something unnecessary, like  clear‐
          ing the screen.

เช่นPAGER="less -X" man manสามารถใช้สำหรับการทดสอบและถ้าคุณพบว่าพฤติกรรมนี้ดีกว่าคุณอาจพิจารณาการตั้งค่าPAGERนี้อย่างถาวร


น่าเสียดายที่มันทำให้ประวัติสกรอลล์ยุ่งเหยิง
musiKk

@musiKk ทำงานได้ดีสำหรับฉันบน Ubuntu 16.04 ด้วยเทอร์มินัล unicode ที่ชาญฉลาด (ไม่ใช่คอนโซล Linux) และผู้ชาย 2.7.5
cat

3
@musiKk: หากคุณต้องการเลื่อนกลับไปยังหน้า man หลังจากออกเพจเจอร์คุณต้อง จำกัด ตัวเองให้เลื่อนไปข้างหน้าใน man page (ตามบรรทัดหรือหน้า) ไม่ใช่การเข้าถึงแบบสุ่มปกติ
Peter Cordes

1
หรือคุณสามารถใช้LESS=-Xเพื่อหลีกเลี่ยงการเปลี่ยนแปลงPAGER(ฉันไม่ไว้วางใจ 100% ให้ทำงานในโปรแกรมทั้งหมดที่มีพื้นที่เช่นนั้นแม้ว่ามันจะใช้งานได้ในมนุษย์)
Random832

11

ถ้าคุณใช้เพจเจอร์น้อยลง (ซึ่งเป็นเรื่องธรรมดามาก) คุณไม่จำเป็นต้องจัดการกับการปรับเปลี่ยนเพจเจอร์ของคุณเพียงแค่ทำการเปลี่ยนเส้นทาง I / O:

man <whatever you want to man> | cat -

นี่จะพิมพ์สำเนาไปยังเทอร์มินัลเพื่อให้คุณสามารถเลื่อนขึ้นเมื่อคุณต้องการ


1
ปัญหาหนึ่งของวิธีนี้คือหน้ายาว ๆ อาจจะเลื่อนกลับไปที่ส่วนที่คุณสนใจและคุณจะไม่เห็นทั้งส่วนนั้นและบรรทัดคำสั่งปัจจุบัน
jlliagre

ไม่มีคำแนะนำอื่นใดที่เอาชนะปัญหานี้ - มันมีอยู่ในหน้าต่างคอนโซลเดียว แต่ด้วยที่กล่าวว่าคุณสามารถเขียนคำสั่งของคุณเลื่อนขึ้นเล็กน้อยและเลื่อนกลับไปที่คำสั่งที่เขียนครึ่งของคุณ
Brennen Smith

คำแนะนำของฉันเอาชนะปัญหานี้ได้อย่างแน่นอน คุณออกจากคำสั่ง man เมื่อหน้าคู่มือที่คุณสนใจอยู่บนหน้าจอและคุณสามารถพิมพ์คำสั่งของคุณโดยที่หน้านั้นยังคงปรากฏบนหน้าจอเดียวกัน
jlliagre

2
-หมายถึงมาตรฐานใน แต่catสันนิษฐานว่าต่อไป
loa_in_

1
เป็นส่วนใหญ่สำหรับความหมาย - ฉันมักจะชัดเจนกับ stdin
Brennen Smith

5

ไม่เพียงlessแต่ยังมีแอพพลิเคชั่นข้อความอื่น ๆ เช่นvimแสดงคุณสมบัติที่น่ารำคาญอย่างยิ่งเหมือนกันสิ่งที่ฉันทำคือการลบความสามารถของเทอร์มินัลเพื่อรองรับคำสั่งที่เกี่ยวข้องจากterminfoฐานข้อมูล

คำสั่งเหล่านี้คือsmcupและrmcupซึ่งถูกออกแบบมาเพื่ออนุญาตให้เปิดและย้ายที่อนุญาตให้ใช้cupคำสั่ง (ตำแหน่งเคอร์เซอร์)

นี่คือฟังก์ชั่นเชลล์ที่ฉันใช้ในการทำงานอัตโนมัติให้ทำงานอย่างน้อยกับ Solaris และการแจกแจง Linux ส่วนใหญ่:

fixterminfo()
{
  (
    [[ ! -d /tmp/terminfo ]] && { mkdir /tmp/terminfo || return ; }
    cd /tmp/terminfo || return
    TERM=xterm infocmp > xterm.src.org
    sed -e 's/rmcup=[^,]*,//'  -e 's/smcup=[^,]*,//' xterm.src.org > xterm.src
    if diff xterm.src.org xterm.src
    then
      echo xterm terminfo already patched
      return
    fi
    TERMINFO=/tmp/terminfo tic xterm.src
    if [ -f /usr/share/lib/terminfo/x/xterm ] ; then
      XTERM=/usr/share/lib/terminfo/x/xterm
    else
      if [ -f /lib/terminfo/x/xterm ] ; then
        XTERM=/lib/terminfo/x/xterm
      else
        if [ -f /usr/share/terminfo/x/xterm ] ; then
          XTERM=/usr/share/terminfo/x/xterm
        else
          echo xterm terminfo not found ; return
        fi
      fi
    fi
    if [ ! -f ${XTERM}.org ]
    then
      sudo cp ${XTERM} ${XTERM}.org || return
    fi
    cat /tmp/terminfo/x/xterm | sudo dd of=${XTERM}
  )
}

หากรายการเทอร์มินัลของคุณไม่ย้อนกลับไปxtermเป็นคุณควรแทนที่xtermด้วยชื่อสถานีด้านขวาในสคริปต์


1
ใช่ แต่นี่จะเป็นการแบ่งโปรแกรมอื่น ๆ (ไม่จำเป็นว่าจะเป็นวิทยุติดตามตัวหรือคำสาป แต่เป็นโปรแกรมแก้ไขคล้าย readline เป็นต้น)
cat

1
@cat ไม่ว่าฉันจะตรวจสอบใด ๆ ที่มีอยู่ แต่ฉันไม่เคยสังเกตเห็นปัญหาใด ๆ กับโปรแกรมอื่น ๆ หลังจากใช้วิธีแก้ปัญหานี้ คุณมีตัวอย่างของโปรแกรมที่ทำงานผิดปกติหรือไม่? ฉันยังสงสัยด้วยว่าพวกเขาล้มเหลวนั่นเป็นปัญหาทางด้านของพวกเขาหรือเปล่า เทอร์มินัลอีมูเลเตอร์ไม่ควรสนับสนุนความสามารถ terminfo ทุกตัวในนั้น เพียงโฆษณาสิ่งที่สนับสนุนและขึ้นอยู่กับแอปพลิเคชันเพื่อจัดการกับมัน
jlliagre

3

คุณสามารถไพพ์เอาต์พุตไปยังcatคำสั่ง

man man|cat

หรือใช้แทนเพจเจอร์เริ่มต้นเช่นในตัวอย่างนี้ที่เรียกใช้ man บนตัวมันเอง:

PAGER=cat man man

2

โดยไม่ต้องแก้ไขเพจเจอร์โซลูชันที่มีไพพ์ที่สามารถทำงานได้ในสภาพแวดล้อมส่วนใหญ่:

ตัวอย่างสำหรับ man ls

  • ออกจากหน้าคนทั้งหมดในหน้าจอman ls | cat
  • อ่านหน้าลิมนุษย์ส่งออกที่มีความเป็นไปได้ของการออกได้ตลอดเวลาด้วยQ :man ls | more
  • กรองเนื้อหาของมนุษย์ด้วยรูปแบบและให้บรรทัดที่ตรงกันในหน้าจอ:man ls | grep somestring

-3

ปี 2559 เพียงแค่เปิดเทอร์มินัลหรือแท็บหรือหน้าต่างที่สองหรืออ่านคนออนไลน์ ..


และนี่คือทางออกที่ชัดเจนในทางปฏิบัติ
Braiam

1
@Braiam ไม่สามารถใช้งานได้หากเครื่องอยู่บนหน้าจอโทรศัพท์มือถือ
NathaneilCapital

@NathaneilCapital เสียงเหมือนถึงเวลาที่จะเรียนรู้ tmux
Michael Hampton

-3

แม้บนเซิร์ฟเวอร์ของฉัน (FreeBSD) ฉันติดตั้ง X และ xfce จากนั้นฉันก็จัดสรรบัฟเฟอร์ขนาดใหญ่ (เช่น 10,000 บรรทัด) สำหรับเทอร์มินัลอีมูเลเตอร์เพื่อให้ฉันสามารถเลื่อนหน้า man เต็มในหนึ่งในนั้นและใช้อินสแตนซ์เทอร์มินัลแยกต่างหากเพื่อรวบรวมคำสั่ง ทำงานรักษา

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.