cat을 실행한 후 하위 프로세스에서 vim을 호출합니다.

cat을 실행한 후 하위 프로세스에서 vim을 호출합니다.

vim_run다음을 수행하는 bash 함수를 만들려고 합니다 .

  • 사용자는 명령 출력을 다음으로 전송합니다.vim_run
  • 사용자가 출력을 편집할 수 있습니다.
  • 사용자가 vim을 종료하면 해당 버퍼의 내용이 이제 전달됩니다.source file

이 프로세스는 삭제할 파일 목록을 편집하는 데 유용합니다. 나는 현재 이것을 다음과 같이 구현합니다.

function vrun() {
    local tmpfile=$(mktemp)
    cat > "$tmpfile"
    vim "$tmpfile" --not-a-term
    source "$tmpfile"
    rm "$tmpfile"
}

그러나 stdin 및 터미널 측면에서 vim을 올바르게 실행하는 방법을 모르겠습니다. 출력을 이 함수로 파이프할 때마다, 예를 들어

echo 'echo foo' | vim_run

무언가를 편집하고 vim을 종료하면 터미널이 중단되어 입력할 때 문자가 표시되지 않습니다. visible 을 입력할 때만 stty sane정상으로 돌아갑니다 . 나는 vim이 제대로 작동하려면 stdin에 액세스해야 한다는 것을 막연하게 이해합니다. 그러나 cat > $tmpfile그것이 완료되면 나머지 stdin을 vim에서 사용할 수 있어야 하지 않습니까?

답변1

이것은 나를 위해 문제를 해결했습니다.

function vrun() {
    local tmpfile=$(mktemp)
    cat > "$tmpfile"
    vim "$tmpfile" < /dev/tty
    source "$tmpfile"
    rm "$tmpfile"
}

세션의 제어 TTY를 Vim의 표준 입력으로 리디렉션해야 합니다.

관련 정보