Làm thế nào tôi có thể giữ nội dung tôi đã đọc từ người đàn ông sau khi tôi bỏ thuốc lá?


24

Vì vậy, chúng tôi sử dụng man whateverđể có được cách sử dụng và thông tin khác liên quan đến whateverlệnh, khi tìm thấy phần thông tin liên quan, tôi muốn thoát manlệnh với thông tin còn lại trên màn hình. Vì vậy, tôi có thể gõ lệnh tiếp theo với trọng tài ở trên. Nhưng manlệnh thoát khỏi toàn bộ màn hình để khôi phục màn hình cũ tương tự vim. Có cách nào để đạt được điều này?



Tất cả các đề xuất đều tốt, nhưng bạn cũng có thể chỉ cần mở một cửa sổ thứ hai để xem trang người đàn ông. Và có lẽ cũng có người xem trang GUI.
Barmar

Câu trả lời:


38

Tôi tin rằng đây không phải là quá nhiều về manbản thân nó mà là về máy nhắn tin lựa chọn của bạn ( PAGERbiến môi trường) kết hợp với thiết bị đầu cuối đang sử dụng.

Tôi đoán máy nhắn tin của bạn có lẽ less(máy nhắn tin mặc định điển hình hiện nay và phù hợp với mô tả).

lesscó một tùy chọn -Xcó thể giúp bạn có hành vi theo những gì bạn đang tìm kiếm.

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

Ví dụ: PAGER="less -X" man mancó thể được sử dụng để kiểm tra nó và nếu bạn thấy hành vi này tốt hơn, bạn có thể xem xét cài đặt PAGERgiá trị này vĩnh viễn.


Thật không may, nó làm rối tung lịch sử cuộn.
musiKk

@musiKk Hoạt động tốt với tôi trên Ubuntu 16.04 với thiết bị đầu cuối unicode thông minh (không phải bảng điều khiển Linux) và người đàn ông 2.7.5
mèo

3
@musiKk: nếu bạn muốn có thể cuộn qua trang man sau khi thoát máy nhắn tin, bạn phải giới hạn bản thân để cuộn về phía trước trong trang man (theo dòng hoặc trang), chứ không phải truy cập ngẫu nhiên thông thường.
Peter Cordes

1
Hoặc bạn có thể sử dụng LESS=-X, để tránh phải thay đổi PAGER(Tôi không tin tưởng 100% nó hoạt động trong tất cả các chương trình có không gian như vậy, mặc dù nó hoạt động ở nam giới.)
Random832

11

Nếu bạn đang chạy ít hơn như máy nhắn tin của mình (rất phổ biến), bạn không cần phải sửa đổi máy nhắn tin của mình, chỉ cần thực hiện chuyển hướng I / O:

man <whatever you want to man> | cat -

Điều này sẽ in một bản sao đến thiết bị đầu cuối để bạn có thể cuộn lên khi bạn cần.


1
Một vấn đề với cách tiếp cận này là với các trang thủ công dài, có thể khó cuộn lại phần bạn quan tâm và bạn sẽ không thấy cả phần đó và dòng lệnh hiện tại.
jlliagre

Không có gợi ý nào khác khắc phục được vấn đề này - đó chỉ là vốn có trong một cửa sổ giao diện điều khiển duy nhất. Nhưng với điều đó, bạn luôn có thể viết lệnh của mình, cuộn lên một chút và cuộn xuống lệnh viết một nửa của bạn.
Brennen Smith

Đề nghị của tôi chắc chắn khắc phục vấn đề này. Bạn để lại lệnh man khi trang thủ công mà bạn quan tâm trên màn hình và bạn có thể nhập lệnh của mình với trang đó vẫn hiển thị trên cùng một màn hình.
jlliagre

2
-biểu thị tiêu chuẩn trong nhưng catgiả sử rằng dù sao đi nữa
loa_in_

1
Nó chủ yếu dành cho ngữ nghĩa - tôi luôn thích rõ ràng với stdin.
Brennen Smith

5

Không chỉ lessmà còn các ứng dụng văn bản khác như vimthể hiện tính năng cực kỳ khó chịu, điều tôi làm chỉ đơn giản là loại bỏ khả năng cho thiết bị đầu cuối hỗ trợ các lệnh liên quan khỏi terminfocơ sở dữ liệu.

Các lệnh này được smcuprmcupđược thiết kế để cho phép bật và di chuyển trong đó cuplệnh (vị trí con trỏ) được cho phép.

Đây là một hàm shell mà tôi đã sử dụng để tự động hóa tác vụ, nó hoạt động ít nhất với Solaris và có khả năng là hầu hết các bản phân phối 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}
  )
}

Nếu mục thiết bị đầu cuối của bạn không dự phòng xterm, bạn nên thay thế xtermbằng tên thiết bị đầu cuối bên phải trong tập lệnh.


1
Vâng nhưng sau đó điều này phá vỡ các chương trình khác (không nhất thiết là máy nhắn tin hoặc lời nguyền, nhưng các biên tập viên giống như người đọc, v.v.)
mèo

1
@cat Không phải tôi đã kiểm tra bất kỳ cái nào hiện có, nhưng tôi không bao giờ nhận thấy bất kỳ vấn đề nào với các chương trình khác sau khi sử dụng cách giải quyết này. Bạn có ví dụ về các chương trình sẽ hành xử kỳ quặc không? Tôi cũng nghi ngờ nếu họ thất bại, đó là một vấn đề về phía họ. Trình giả lập thiết bị đầu cuối không có nghĩa vụ hỗ trợ mọi khả năng terminfo ngoài kia. Nó chỉ quảng cáo những cái mà nó hỗ trợ và tùy thuộc vào ứng dụng để đối phó với nó.
jlliagre

3

Bạn có thể dẫn đầu ra cho catlệnh

man man|cat

hoặc sử dụng nó thay vì máy nhắn tin mặc định, như trong ví dụ này sẽ gọi người đàn ông trên chính nó:

PAGER=cat man man

2

Không sửa đổi máy nhắn tin, một giải pháp với các đường ống có thể hoạt động trong hầu hết các môi trường:

Ví dụ cho man ls

  • Để lại toàn bộ trang man trong màn hìnhman ls | cat
  • Đọc một đầu ra người đàn ông được phân trang , với khả năng rời khỏi nó bất cứ lúc nào với q :man ls | more
  • lọc nội dung man với một mẫu và giữ các dòng khớp trong màn hình:man ls | grep somestring

-3

Đó là năm 2016, chỉ cần mở một thiết bị đầu cuối thứ hai hoặc tab hoặc cửa sổ hoặc đọc người đàn ông trực tuyến ..


Và đây là giải pháp thực tế rõ ràng.
Braiam

1
@Braiam Không thực tế nếu thiết bị đầu cuối trên màn hình điện thoại di động.
NathaneilCapital

@NathaneilCapital Nghe có vẻ như đã đến lúc học tmux.
Michael Hampton

-3

Ngay cả trên các máy chủ của tôi (FreeBSD) tôi cũng cài đặt X và xfce. Sau đó, tôi phân bổ một bộ đệm lớn (ví dụ 10 000 dòng) cho các trình giả lập thiết bị đầu cuối để tôi có thể cuộn hoàn toàn trang man trong một trong số chúng và sử dụng một thể hiện đầu cuối riêng để lắp ráp lệnh. Làm việc một điều trị.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.