vim이 파일 끝에 줄 바꿈을 자동으로 추가하는 방법은 무엇입니까?


16

Vim은 일반적으로 <EOL>원본 파일에 줄이있을 때만 마지막 줄을 씁니다 .

vim이 파일 끝에 항상 새 줄을 작성하는 방법 (파일이 바이너리가 아니고 아직없는 경우)?

eol옵션을 테스트 했지만 예상대로 작동하지 않았습니다.

참조 : 텍스트 파일의 끝에서 끝 (end-of-line) 누락 보존 하지만 반대. 그리고 왜 파일이 ​​줄 바꿈으로 끝나야합니까?

답변:


17

기본 정보

Vim은 버퍼에 최신 줄 바꿈을 표시하지 않지만 실제로 vim은 파일을 작성할 때 파일 끝에 EOL을 배치합니다. Unix 시스템의 텍스트 파일에 대한 표준이기 때문입니다. 이에 대한 자세한 정보는 여기를 참조하십시오 . 즉, vim에서 파일 끝에 새 줄이없는 것에 대해 걱정할 필요가 없습니다.

실험 1

이 작은 실험을 통해이 동작을 확인할 수 있습니다. 터미널에서 다음을 실행하십시오.

$ vim test_test

문자를 입력하고 1파일을 저장하십시오 :wq.

파일에 문자가 하나 밖에 없습니다. 실제로 :) 이제 파일 1LF문자가 있습니다. hexdump 유틸리티를 사용하여 확인하십시오.

$ hexdump test_test
0000000 31 0a
0000002

31는 문자의 ASCII 코드이며 1, 0a비 인쇄 LF문자의 ASCII 코드이며 UNIX의 경우 줄 끝의 코드를 이미 알고있을 수 있습니다.

실험 2

그러나 파일 eol끝에 기호 가없는 파일을 열면 어떻게 될까요? 그것도 확인해 보자. 마지막에 eol없이 파일을 만듭니다 (예 : 다음과 같이).

$ echo -n "1" > test_without_eol

그런 다음 다시 hexdump로 내부를 살펴 보겠습니다.

$ hexdump test_without_eol
000000 31
0000001

따라서 여기에는 eol문자 가 없습니다 . 이 파일을 vim에서 엽니 다 :

$ vim test_without_eol

편집기 하단에 다음이 표시됩니다.

"test_without_eol" [noeol] 1L, 1C

이 파일을 저장하면 eol문자가 자동으로 저장 됩니다.

우리가 이것에 대해 무엇을 할 수 있습니까?

파일의 끝을 정말로 볼 필요가 있다면. 이 명령을 사용해보십시오 :

:set listchars=eol:$

모든 eol문자를 $부호 로 표시합니다.


큰. Vim이 실제로이 새로운 라인을 보여주지 않았기 때문에 혼동 후에도 같은 결론에 도달했습니다.
kenorb

1
그런데 @kenorb이 명령을 사용하여 모든 EOL charachter를 보여줄 수 있습니다:set listchars=eol:$
Alexander Myshov

"실제로이 줄을 보여주지 않았습니다"-유닉스에는 줄이 없습니다. 행은 "LF 문자가 아닌 LF 문자로 끝나는 비 LF 문자 수"로 정의됩니다. LF를 "다음 줄로 가기"가 아니라 "줄의 끝"으로 생각하면 Vim은 갑자기 훨씬 더 의미가 있습니다.
Amadan

8

빔은 파일로 열 경우 EOL를 생략 'binary' 하고'endofline' (시 개방 바이너리 파일이 EOL을하지 않았거나 명시 적으로 옵션을 재설정 할 때) 옵션이 재설정됩니다. 다시 말해, Vim은 바이너리 파일에 대해 누락 된 EOL 만 존중합니다. 텍스트 파일의 경우 항상 (추가 된) EOL로 씁니다. (따라서 EOL없이 텍스트 파일을 유지하려면 PreserveNoEOL 플러그인 과 같은 솔루션이 필요한 이유 입니다.) 자세한 내용은에서 확인할 수 있습니다 :help 'endofline'.

따라서 Vim이 자동으로 EOL을 작성하려면 파일을 이진이 아닌 파일로 열어야합니다 .


5

으로 알렉산더 언급, 빔은 그렇게 (특히과 혼란 그 이유는, EOF에서 EOL을 표시하지 않습니다 빈 / 빈 새로운 라인 , 또 다른 일이다) 따라서 실제로 저장 파일에있는 모든 시간을 기록합니다.

작동하는지 테스트하는 간단한 테스트는 다음과 같습니다.

$ printf foo > foo.txt
$ cat foo.txt
foo$ wc foo.txt
0 1 3 foo.txt
$ vim -cwq foo.txt
$ cat foo.txt
foo
$ wc foo.txt
1 1 4 foo.txt

EOL이 없을 때 쉘 프롬프트가 어떻게 작동하는지 주목하십시오 (다음 행과 혼합 됨). Vim으로 파일을 다시 저장하면 추가됩니다.

를 사용하여 wc저장 전후에 줄, 단어 및 문자를 계산할 수 있으므로 실제로 변경되는 것을 볼 수 있습니다.

이것이 왜 중요한가? POSIX 호환 파일을 유지 합니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.