[완료]Unix의 text 화일을 vi로 보면..
글쓴이: armadillo / 작성시간: 목, 2012/04/26 - 9:35오후
조금 어이없는 질문일지 모르겠지만...
unix에서 화일의 개행문자는 LF(Line Feed)으로 알고있고,
LF로 개행이 된 텍스트 화일을 vi로 열어보면
라인 끝이 LF 인 라인들은 다음줄로 줄바꿈을 하는데..
문제는 화일의 마지막이 LF 인 경우에는
다음줄로 줄바꿈을 하지 않은 상태이더군요.
물론 윈도우에서는 개행문자가 다르니 그렇지 않을것이고...
혹시나 해서 od 명령으로 화일 마지막을 살펴도 분명 LF 이고...
화일로 interface를 하는데 이런 생각이 들어서 질문 드려봅니다.
상식이하의 질문이라도 웃지 마시고...
혹 참고할 자료라도 너그러이 알려주시면 찾아보겠습니다.
즐거운 저녁 되세요.
Forums:
_
관측하신 게 맞습니다. vim에서는 기본적으로 파일의 끝에 개행문자를 자동으로 집어넣습니다.
http://vimdoc.sourceforge.net/htmldoc/vimfaq.html 의 5.4 부분에서는 :set binary와 :set noeol을 한 다음 저장하면 마지막 개행문자를 안 넣는다고 하네요. (직접 해본 적은 없습니다.)
klutzy 님이 이미 말씀하셨듯이, 마지막에
klutzy 님이 이미 말씀하셨듯이, 마지막에 줄바꾸지 않고 바로 저장해도 자동으로 \n 이 붙고, 역으로 제일 끝에 붙어 있는 파일을 읽어도 마치 없는 것처럼 보여줍니다.
그래서 set binary noeol 하여 저장하여 개행문자를 없앤 상태로 저장하고, 그걸 다시 vi로 읽고, 아무것도 안 하고 곧바로 :wq 로 저장하면 파일이 바뀌어 있기도 하지요ㅋ
왜 굳이 개행문자를 추가해 넣도록 되어 있는지는 참 궁금해요.
좋은 하루 되세요!
$ echo -en "\n\n" >
vi 로 열어보면 비어있는 두 줄이 보이실 겁니다. 무조건 없는 것 처럼 보여주진 않습니다.
텍스트 파일 기준으로 작성된 유틸리티들 중에 eol 로 끝나지 않는 텍스트 파일에 대해 경고를 내보내 주는 것도 있습니다.
diff 였던가 patch 였던가... 하여간 이쪽 계열이었습니다.
오 그러네요. 신기해라. "\n\n" 대신에
오 그러네요. 신기해라.
"\n\n" 대신에 "1\n" 하면 이건 또 아예 줄바꿈 전혀 없는 듯 보여주고요ㅋ
다른 분들 말씀 들어보니 일반적으로 자연스러운 형태로 만들어주는, 나름 합리적인 동작인 것 같습니다만, 저는 여전히 에디터 사용자가 파악하지 못하는 조작을 하는 느낌이라 탐탁치 않아하는 편입니다.
실제로 저걸 몰라서 엄청 헤맨 게... code golf 짜는데 도대체 이해할 수 없는 1바이트 추가분을 못 찾아서ㅎㅎㅎㅎ (원체 예외적인 경우긴 하죠)
좋은 하루 되세요!
ANSI C Standard 에서는
(#include 가 개행문자를 추가해주지 않으므로) 소스 파일의 맨 마지막에 개행문자를 넣으라고 되어있습니다.
실제 컴파일러가 Warning을 내기도 하지요.
vi User == Unix User == C Programmer
아마도 위와 같은 등식이 성립한다고 볼 때, vi 설정으로는 적절한 기본값이 아니었을까 생각됩니다.
more, cat 등과 같은 유닉스 기본 명령들이 파일 끝에 개행문자가 나오길 기대하고 있어서 그런게 아닐까요?
파일 끝에 개행문자가 없으면 대략 다음과 같은 느낌.
upriser$ more file.txt
Line one
Line two
Line threeupriser$
댓글 달기