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의 표준 입력으로 리디렉션해야 합니다.