vim에서 tmp 파일을 보는 동안 cmd 출력을 tmp 파일로 보내는 방법

vim에서 tmp 파일을 보는 동안 cmd 출력을 tmp 파일로 보내는 방법

출력을 임시 파일로 보낸 다음 VIM을 사용하여 임시 파일을 열고 결과를 검사하고 싶은 경우가 종종 있습니다. 나는 일반적으로 잘 작동하는 다음과 같은 접근 방식을 생각해 냈습니다.

function viewlog()
{
    local d="/tmp/viewlog"
    #local cmd="adb logcat"
    local cmd="tail --follow=name /var/log/syslog"
    #local cmd="tail --follow=name /var/log/syslog | grep myProcess"
    local stopmsg="TERMINATED"

    # setup temp file
    mkdir $d
    local fn=$(mktemp -p $d --suffix=".log")

    # start redirecting cmd to the tmp file in a subshell
    ( ( eval $cmd >> $fn && echo -n "$stopmsg") & ) 2> /dev/null
    local pid=$!

    # open the temp file in vim
    vim $fn +

    # kill the cmd when I exit vim
    kill $pid
    wait $pid
}

출력은 cmd임시 파일에 저장되고 vim에서 열립니다. 또한 매우 쉽게 다시 로드할 수 있도록 .vimrc에 다음이 포함되어 있습니다.

map <F5> <ESC>:e!<CR>G

이를 통해 새 데이터가 추가될 때 임시 파일을 쉽게 "새로 고칠" 수 있습니다.

tail이는 또는 와 같은 간단한 "생성기" 명령이 있을 때 유용합니다 adb logcat. 그러나 위에 주석 처리된 grep 파이프와 같은 더 복잡한 명령을 사용하려는 경우에는 작동하지 않습니다. 임시 파일에 아무 것도 표시되지 않습니다.

쉘 기능에 어떤 문제가 있나요?

답변1

이것은 autoread:

:help autoread
When a file has been detected to have been changed outside of Vim and                      
it has not been changed inside of Vim, automatically read it again.                        
When the file has been deleted this is not done.

하지만 나는 이것이 결코 나에게 만족스럽지 못했다는 것을 인정해야 합니다. vim집중하느냐 안하느냐에 따라 효과가 있을 수도 있고 없을 수도 있습니다. 타일링 창 관리자를 사용할 때 이 기능은 완전히 작동하지 않습니다. 하지만 한번 시도해 보세요. 아마도 그것이 당신에게 도움이 될 것입니다. 그렇지 않으면 시장에 더 똑똑한 대안이 있습니다.

관련 정보