filename
변수에 filename= test.txt
으로 오타가 있습니다 (추가 공간). 이 표현식은 test.txt
명령을 filename
환경 변수 (빈 문자열)로 지정하여 호출됩니다. 따라서 =
이후에 공간을 삭제해야합니다. 읽기 오류 입력 메시지에 대해서는
는
의 빔 설명서를 읽어 :help E208
:이 입력이 요구되는 동안 빔이 입력 된 문자를 읽을 수없는 경우에 발생
Vim: Error reading input, exiting...
. Vim은 막혔다. 끝내기 만하면된다. 이것은 stdin과 stderr가 모두 리디렉션되고 Vim을 종료하지 않는 스크립트를 실행할 때 발생할 수 있습니다.
그래서 Vim은 Vim을 종료하지 않은 스크립트를 읽는다고 생각합니다. 스크립트가 삽입 모드로 들어가서 Hello
을 입력 한 다음 Esc을 입력하고 마지막으로 :x
명령을 호출합니다. 모든 것이 좋다. :x
명령은 명령 행 영역에 입력되면 Vim을 빠져 나온다. 당신이 제어로 ^[
를 입력 한 경우 - V, Esc를 스크립트가 삽입 모드를 종료하고 성공적으로 :x
명령을 실행했을 것이다. 따라서 ^[
을 두 자로 입력했습니다.그것은
Vim: Warning: Input is not from a terminal
Vim: Error reading input, exiting...
Vim: preserving files...
Vim: Finished.
을 이제 실제 이스케이프 문자로 두 문자를 ^[
를 교체하고 같은 디렉토리에서 스크립트를 실행하면 : 그래서 당신의 진짜 입력 Hello^[:x
이었다 (하고 스크립트가 빔을 종료하지 않았다) 때문에 스왑 파일의 실패합니다
Vim: Warning: Input is not from a terminal
Vim: Error reading input, exiting...
Vim: Finished.
을 (당신은 vim test.txt
을 실행하여 긴 설명을 읽을 수 있습니다). -n
옵션을 사용하여 스왑 파일을 무시할 수 있습니다 (vim -n "$filename"
). 이제 출력은 다음과 같습니다.
Vim: Warning: Input is not from a terminal
의미가 있습니다. 실제로 Vim의 대화 형 버전은 필요하지 않습니다. 따라서 ex 모드 (-e
옵션)을 사용하거나 예 : 예 모드 (-E
옵션) : vim -n -E "$filename"
으로 개선해야합니다.
내용을 해석 할 필요가없는 경우 작은 따옴표로 묶고 문자열에 쉘 변수 인 filename='test.txt'
이 있으면 큰 따옴표로 묶는 것이 좋습니다.
고정 버전 :
filename='test.txt'
vim -n -E "$filename" << COMMAND
i
Hello
^[
:x
COMMAND
(^[
가 제어하여 빔에 입력 - V,Esc 키).
고마워,이 모든 것을 내 머리 속에 넣을거야. D –