Vim에서 매뉴얼 페이지 보기

Vim에서 매뉴얼 페이지 보기

Bash에 함수를 작성하여 확인했습니다.남성Vim의 페이지:

viman () { man "$@" | vim -R +":set ft=man" - ; }

이것은 잘 작동합니다. 존재하지 않는 매뉴얼 페이지를 전달하면 유일한 문제가 발생합니다. 맨페이지가 존재하지 않지만 여전히 vim빈 버퍼로 열린다고 인쇄됩니다.
그래서 오류 코드( 16여기에 있음)를 확인하고 페이지가 없으면 종료하도록 기능을 변경했습니다. 수정된 함수는 다음과 같습니다.

viman () { man "$@" | [[ $? == 16 ]] && exit 1 | vim -R +":set ft=man" -  ; }

그러나 이제는 효과가 없습니다.

매뉴얼 페이지가 존재하지 않으면 프로그램을 종료하고, 그렇지 않으면 vim.

답변1

이것을 시도해 보세요: vim이 성공적으로 시작된 경우 man 출력 캡처

viman () { text=$(man "$@") && echo "$text" | vim -R +":set ft=man" - ; }

답변2

반환 코드를 확인하는 아이디어는 마음에 들지만 man파이프를 통해 테스트할 수는 없습니다. 두 번만 실행할 수 있습니다 man.

viman () { man "$@" >/dev/null 2>&1 && man "$@" | vim -R +":set ft=man" - ; }

man ... | vim ...첫 번째 호출이 성공한 경우에만 실행 됩니다 man.

답변3

맨페이지를 표시하려는 명령을 MANPAGER호출하는 데 사용할 수 있는 환경 변수가 있습니다 . man이것의 장점은 man직접 호출할 수 있고 매뉴얼 페이지가 존재하지 않으면 호출기가 전혀 실행되지 않는다는 것입니다.

따라서 다음과 같은 래퍼 스크립트는 다음과 같습니다 ~/bin/vimman.

#! /bin/sh
vim -R +":set ft=man" -

쉘 초기화 파일 어딘가에:

export MANPAGER="$HOME/bin/vimman"

man fooVim에서 직접 맨페이지를 실행할 수 있습니다 .

man( 사용된 명령 에 따라 다음을 수행할 수도 있습니다.

export MANPAGER='vim -R +":set ft=man" -'

래퍼 스크립트를 직접 사용하는 대신. )


충분히 새로운 Vim이 있다면 이 --not-a-term옵션을 사용하여 Vim이 stdin이 TTY가 아니라고 불평하는 것을 막을 수 있습니다.


뻔뻔한 플러그 : 내가 썼다작은 플러그인Vim을 매뉴얼 페이지로 사용하는 것이 편리합니다.

답변4

기반으로이 답변버퍼에 아무것도 없으면 vim이 시작되고 종료됩니다. 단점은 vim시작 시 화면이 "깜박거린다"는 것입니다. 또한 man페이지를 찾을 수 없을 때 종료 코드를 설정하지 않습니다.

viman () { vim -R +':set ft=man|exe !search(".")?"quit!":""' <(man "$@" 2>/dev/null); }

man이는 페이지가 존재하는 동안 페이지를 두 번 로드 하지 않는다는 점에서 Jeff Schaller의 답변이 개선된 것입니다 . 또한 vim이전 예제처럼 불필요하게 로드 되지 않습니다 . 그리고 그것하다man페이지가 없을 때 종료 코드를 설정합니다 .

viman () { man -f "$@" >/dev/null 2>&1 && vim -R +":set ft=man" <(man "$@"); }

두 예제 모두 "Vim: Reading from stdin..." 메시지를 피하기 위해 Bash 프로세스 대체를 사용합니다.

페이지를 변수로 로드하지도 않습니다.

관련 정보