리디렉션을 사용하여 Vim의 표준 입력을 디스크의 일부 파일로 변경할 수 없는 이유는 무엇입니까?

리디렉션을 사용하여 Vim의 표준 입력을 디스크의 일부 파일로 변경할 수 없는 이유는 무엇입니까?

나는 "를 읽고 있었다.UNIX 시간 공유 시스템 Dennis M. Ritchie 및 Ken Thompson" 논문과 표준 입력/출력 리디렉션의 예로서 ed 편집기의 예를 제공합니다.

이 명령은 ed <script스크립트를 편집기 명령 파일로 해석합니다. 따라서 " <script"는 "에서 입력을 받다 script"를 의미합니다.

그러나 vim을 사용하여 동일한 작업을 시도하면 "입력을 읽는 중 오류가 발생했습니다"라는 오류가 발생합니다.

[m@localhost rough]$ vim t2 <t
Vim: Warning: Input is not from a terminal
Vim: Error reading input, exiting...
Vim: preserving files...
Vim: Finished.

왜 그래야만하지?

답변1

ed그리고 ex라인 편집자. 텍스트 파일의 줄로 구동할 수 있는 일종의 사용자 인터페이스가 있습니다.

viVIM과 같은 모든 클론은전체 화면 편집기. 입력과 출력을 텍스트 파일 라인으로 처리하지 않는 사용자 인터페이스가 있습니다. 입력은 행으로 그룹화되지 않은 개별 문자 및 문자 시퀀스입니다. 출력은 비디오 터미널에 그리기 위한 개별 문자와 이스케이프 및 제어 시퀀스입니다.

모델사용자 I/O텍스트 파일은 GUI 프로그램은 물론 대화형 전체 화면 TUI 프로그램에도 매핑되지 않습니다.

당신이 얻는 행동은 프로그램마다 다릅니다. 일부 전체 화면 TUI 프로그램은 표준 입력이 터미널이 아닌 경우를 인식하고 중단합니다 nvi. VIM과 같은 다른 프로그램은 경고하지만 비터미널 입력 파일을 터미널 입력으로 처리하므로 입력이 스크립트 명령으로 처리되기를 기대하는 사람들에게는 다소 이상한 동작이 발생합니다. less예를 들어, 사용자 인터페이스를 위해 터미널 장치를 명시적으로 열고 (입력 부분) 표준 I/O를 사용하지 않는 경우 도 있습니다 . 그러나 대부분의 셸(라인 모드 이상의 대화형 사용자 인터페이스가 있음)과 같은 다른 것들은 비대화형 모드로 전환됩니다.

1974년에 Unix에 관해 작성된 논문은 라인 모드 사용자 인터페이스와 전체 화면 사용자 인터페이스의 차이점을 설명하는 좋은 지침이 아닙니다. 아마도 최초의 비디오 터미널용 Unix 편집자인 George Coulouris는 em1년 후의 미래였을 것입니다. 또한 미래에는 termcap, (자체의) 명령줄 편집 기능이 있는 쉘, 그래픽이 아닌 특수 문자를 사용하는 줄 규칙 기본값이 있었습니다.

관련 정보