운영 체제 기반 bash 명령을 실행하기 위해 vim 명령을 매핑하는 방법은 무엇입니까?

운영 체제 기반 bash 명령을 실행하기 위해 vim 명령을 매핑하는 방법은 무엇입니까?

즉, 터미널의 단일 bash 명령에 조건이 포함될 수 있습니까? 그렇다면 어떻게 해야 할까요?

vimrc(시스템 간 공유)에서 다음 명령을 사용하여 현재 LaTeX 문서를 .pdf 형식으로 엽니다. map ,v :!gnome-open %<.pdf <CR> <CR>

내 질문은 내가 집에 OS X 컴퓨터에 있을 때 v가 "%<.pdf 열기"를 수행하도록 하는 가장 좋은 방법은 무엇입니까?입니다. 내 의사 코드 추측은 다음과 같습니다.

... if [$OSTYPE == "darwin*"] then open %<.pdf else gnome-open %<.pdf ...

이는 단일 BASH 명령으로 실행됩니다. 그런 조건이 가능한가요? 그렇다면 누구든지 구문에 대해 도움을 줄 수 있습니까? 그렇지 않은 경우 vimrc 파일의 조건을 통해 수행할 수 있습니까?

답변1

또 다른 접근 방식은 운영 체제에 맞게 맵 키 바인딩을 올바르게 생성하는 것입니다. 예를 들어:

if executable("cmd.exe")
    map ,v :!cmd.exe /C start "" "%<.pdf"<CR><CR>
elseif $OSTYPE =~ "darwin.*"
    map ,v :!open '%<.pdf'<CR><CR>
elseif executable("gnome-open")
    map ,v :!gnome-open '%<.pdf'<CR><CR>
endif

이것은 테스트를 거쳤고 작동하는 것 같지만 내 Vim 스크립트가 약간 이상하고 올바른 인용과 같은 일부 세부 사항을 놓쳤을 수 있으므로 Jander의 접근 방식을 더 따르고 쉘 래퍼를 사용할 수도 있습니다. .

map ,v :!open.sh '%<.pdf'<CR><CR>

그리고 ~/bin/open.sh:

#!/bin/sh

if echo "$OSTYPE" | grep "^darwin" >/dev/null 2>&1; then
    open "$@" &
elif type gnome-open &>/dev/null; then
    gnome-open "$@" &
fi

답변2

개인적으로 이 작업을 수행하려면 운영 체제에 적합한 "open" 명령을 사용하여 스크립트를 생성하고 해당 명령 이 내 모든 컴퓨터의 경로에 있는지 ~/bin/open.sh확인합니다 . ~/bin예를 들어 Windows+Cygwin 상자를 추가하려는 경우 이 방법이 더 잘 확장됩니다. 단점은 각 유형의 기계에 서로 다른 스크립트가 필요하다는 것입니다. 비록 스크립트가 매우 간단하므로 실제로 그렇게 나쁘지는 않습니다.

따라서 Mac의 ~/bin/open.sh에서:

#!/bin/sh
open "$@"

Linux의 ~/bin/open.sh에서:

#!/bin/sh
gnome-open "$@"

vimrc에서:

map ,v :!open.sh %<.pdf<CR><CR>

...또는 모든 내용을 한 줄에 표시하려면 :!일반적으로 쉘 스크립트에서 개행 문자를 사용하는 곳에 세미콜론을 사용할 수 있습니다. 귀하의 예를 적용하려면 다음을 수행하십시오.

... if [ "$OSTYPE" == "darwin10.0" ]; then open %<.pdf; else gnome-open %<.pdf; fi

관련 정보