마지막으로 떠난 동일한 위치에서 매뉴얼(또는 정보) 페이지를 엽니다.

마지막으로 떠난 동일한 위치에서 매뉴얼(또는 정보) 페이지를 엽니다.

나는 매뉴얼 페이지가 설치된 소프트웨어에 관한 문서의 주요 소스라고 생각합니다. 참고용으로 사용하고 싶었을 뿐만 아니라 실제로 처음부터 끝까지 읽어보고 싶었습니다.

여기에 문제가 있습니다. 매뉴얼 페이지를 닫을 때 다음번에는 내가 남겨둔 곳에서 열리길 원합니다. 가능합니까?

이상적으로는 기본 시스템 호출기인 less를 사용합니다. 하지만 그 트릭을 수행할 수 있는 호출기로 변경할 수 있습니다.

예를 들어, 독립 실행형 vim은 마지막으로 읽은 파일의 위치를 ​​기억합니다. 위치를 기억하기 위해 호출기로 사용할 수 있는 방법이 있을 수 있습니다.

댓글/답변을 게시하기 전에 아이디어를 시도해 보십시오.

답변1

여기에 해결책이 있습니다TxRVim을 뷰어로 사용하는 Lisp. Ubuntu 18에서 Vim 8.0과 함께 작동합니다.

(당신이 좋아하는 언어로 번역해주세요. 이것은 내 것입니다. 제가 직접 만들었습니다.)

파일이 호출 mnpgr.tl되고 다음 위치에 위치합니다 /path/to/mnpgr.tl.

#!/usr/bin/env txr

(defvarl home-dir (getenv "HOME"))

(defvarl mnpgr-dir (path-cat home-dir ".mnpgr-dir"))

(defvarl vim-commands
         (join-with "|"
                    '("hi def link CtrlHUnderline Special"
                      "hi def link CtrlHBold Keyword"
                      "set syntax=ctrlh"
                      "syntax match CtrlHHide /.\\b/  contained conceal"
                      "set conceallevel=2"
                      "set concealcursor=nc"
                      "map q :q!\r")))

(ensure-dir mnpgr-dir)

(match @(or `@page(@section)`     ;; for "man whatever"
            `@page\\.@section`)   ;; for "man -l file.1"
       (getenv "MAN_PN")
  (with-resources ((rendered-file (path-cat mnpgr-dir `@page.@section`)
                                  (remove-path rendered-file)))
    (with-stream (s (open-file rendered-file "w"))
      (whilet ((line (get-line)))
        (put-line line s)))
    (sh `vim +'@{vim-commands}' '@{rendered-file}' < /dev/tty`)))

다음 명령을 사용하여 매뉴얼 페이지 프로그램으로 설치했습니다.

export MANPAGER=/path/to/mnpgr.tl

노트:

  1. 이 프로그램 $HOME.mnpgr-dir.

  2. 출력을 캡처하여 man작업 디렉터리의 파일에 저장합니다. 파일 이름은 MAN_PN매뉴얼 페이지와 섹션 번호를 제공하는 환경 변수를 기반으로 계산됩니다.

  3. 이 파일에 대해 Vim을 실행합니다. 이름이 안정적이기 때문에 Vim은 마지막 위치를 기억할 수 있습니다.

  4. 파일을 보관할 필요는 없으므로 삭제하세요. ( with-resources범위가 지정된 리소스 제어를 위해 매크로를 사용합니다 .)

  5. 이 파일에는 ^H(백스페이스) 재인쇄 인코딩이 포함되어 있습니다. Vim 8에는 2005년부터 이라는 도구를 제공하는 구문 정의가 있지만 ctrlh그다지 효과적이지 않습니다. 히트작 캐릭터 Ignore에 대한 하이라이트 그룹을 사용하며 숨겨지지 않습니다. 이전 Vim 버전에는 숨겨진 하이라이트 그룹이 있는 것 같습니다 Ignore. 우리는 +Vim 명령줄의 강력한 기능을 사용하여 일부 명령을 주입하여 구문을 선택 ctrlh하고 핫 패치를 적용하여 더 나은 성능을 얻도록 했습니다. 또한 기본 굵은 글씨와 밑줄 대신 굵은 글씨와 밑줄 강조 표시 그룹을 색상 범주에 다시 할당했습니다.

  6. map종료 명령 을 추가합니다 q. 아이디어는 Vim에서 복사한 패턴입니다 +MANPAGER. ( +MANPAGER백스페이스 없이 일반 텍스트로 페이지를 렌더링해야 하고 man원래의 굵은 글씨와 밑줄 마크업이 모두 손실되는 해키 구문 강조를 적용하기 때문에 우리는 이를 사용하지 않습니다 .)

실수:

  1. 백스페이스 및 다시 그리기로 강조 표시된 항목은 검색할 수 없습니다.. 이것은 큰 일이고 큰 일이 될 수 있습니다. 이를 처리하는 한 가지 방법은 전처리기를 사용하여 항목을 다른 표현으로 변환하는 것입니다. 예를 들어, 밑줄이 그어진 단어 _^Hw_^Ho_^Hr_^Hd는 로 변환될 수 있습니다 ^word^. 적절한 구문 강조 정의는 밑줄을 숨기고 단어에 색상을 지정하여 검색 가능하게 만듭니다. 이것이 바로 Vim 매뉴얼에서 강조 표시된 단어가 작동하는 방식입니다.

  2. 매뉴얼 페이지 다시 로드를 사용하면 :e %구문에 대한 핫픽스가 손실되므로 ctrlh모든 백스페이스와 ^H중복 인쇄된 문자가 표시됩니다. 더 나은 솔루션을 위해 자체 구문 강조를 정의하여 파일 형식과 구문을 정의하고 mnpgr이를 파일의 접미사로 사용해야 합니다.

  3. 동일한 이름과 충돌하는 매뉴얼 페이지는 구별되지 않습니다. 때때로 다음 명령을 사용하여 매뉴얼 페이지를 보는 경우 시스템 man -l <file>/usr/share/man. man -l bash.1당신도 그것을 사용한다고 가정합니다 man bash. 둘 다 렌더링된 파일에 매핑됩니다 ~/.mnpgr-dir/bash.1.

  4. shC와 마찬가지로 함수를 사용하면 system()잠재적인 탈출 문제가 있습니다. 작은따옴표가 포함 vim-commands되어 있으면 rendered-file그 주위의 작은따옴표가 깨집니다.


이제 미니 프로젝트입니다.여기 누구 집이에요?.

자체 Vim 구문 정의 파일이 있습니다 mnpgr.vim. 프로그램은 백스페이스 쿵쿵을 구문 분석하고 에서 처리되는 자체 기호를 생성합니다 mnpgr.vim.

답변2

세션이 재부팅 후에도 유지될 필요가 없으면 POSIX 작업 제어를 사용하면 됩니다. Ctrl-Z를 사용하여 man작업을 백그라운드에 놓은 다음 Return을 사용하십시오 fg.

$ jobs
[1]   Stopped                 man gcc
[2]-  Stopped                 man bash
[3]+  Stopped                 info make

중단했던 Bash 매뉴얼 페이지를 계속해서 읽고 싶다면,

$ fg %2

답변3

매뉴얼 페이지의 형식을 PDF로 지정하고 즐겨 사용하는 PDF 뷰어를 사용하여 읽을 수 있습니다. 이는 문자 셀 터미널 에뮬레이터의 기능으로 제한되지 않고 실제 조판을 볼 수 있다는 추가 이점이 있습니다.

예를 들어,작은 숲단일 383페이지 문서로 형식화된 자체 매뉴얼 페이지.

압축되지 않은 파일이 많이 있는 경우남성(7) 및/또는문서(7) 파일이 편리하니 한번 사용해 보세요작은 숲최상의 결과를 얻으려면 1.23.0을 선택하세요.

groff -Rpet -mandoc -Tpdf page.1 page.2 page.3 ...

그러나 다음을 사용하여 개별 매뉴얼 페이지 문서를 쉽게 볼 수도 있습니다.남성, 틀림없이.

zcat -f $(man -w groff_man) | man -l -Tpdf - >| groff_man.pdf

위의 목적사람 데이터베이스2.9.4남성구현하다.

관련 정보