[완료]Unix의 text 화일을 vi로 보면..

armadillo의 이미지

조금 어이없는 질문일지 모르겠지만...

unix에서 화일의 개행문자는 LF(Line Feed)으로 알고있고,

LF로 개행이 된 텍스트 화일을 vi로 열어보면

라인 끝이 LF 인 라인들은 다음줄로 줄바꿈을 하는데..

문제는 화일의 마지막이 LF 인 경우에는

다음줄로 줄바꿈을 하지 않은 상태이더군요.

물론 윈도우에서는 개행문자가 다르니 그렇지 않을것이고...

혹시나 해서 od 명령으로 화일 마지막을 살펴도 분명 LF 이고...

화일로 interface를 하는데 이런 생각이 들어서 질문 드려봅니다.

상식이하의 질문이라도 웃지 마시고...

혹 참고할 자료라도 너그러이 알려주시면 찾아보겠습니다.

즐거운 저녁 되세요.

klutzy의 이미지

관측하신 게 맞습니다. vim에서는 기본적으로 파일의 끝에 개행문자를 자동으로 집어넣습니다.

http://vimdoc.sourceforge.net/htmldoc/vimfaq.html 의 5.4 부분에서는 :set binary와 :set noeol을 한 다음 저장하면 마지막 개행문자를 안 넣는다고 하네요. (직접 해본 적은 없습니다.)

raymundo의 이미지

klutzy 님이 이미 말씀하셨듯이, 마지막에 줄바꾸지 않고 바로 저장해도 자동으로 \n 이 붙고, 역으로 제일 끝에 붙어 있는 파일을 읽어도 마치 없는 것처럼 보여줍니다.

그래서 set binary noeol 하여 저장하여 개행문자를 없앤 상태로 저장하고, 그걸 다시 vi로 읽고, 아무것도 안 하고 곧바로 :wq 로 저장하면 파일이 바뀌어 있기도 하지요ㅋ

왜 굳이 개행문자를 추가해 넣도록 되어 있는지는 참 궁금해요.

좋은 하루 되세요!

bushi의 이미지

$ echo -en "\n\n" > test.txt
$ xxd -g 1 test.txt
0000000: 0a 0a                                            ..

vi 로 열어보면 비어있는 두 줄이 보이실 겁니다. 무조건 없는 것 처럼 보여주진 않습니다.
텍스트 파일 기준으로 작성된 유틸리티들 중에 eol 로 끝나지 않는 텍스트 파일에 대해 경고를 내보내 주는 것도 있습니다.
diff 였던가 patch 였던가... 하여간 이쪽 계열이었습니다.
raymundo의 이미지

오 그러네요. 신기해라.

"\n\n" 대신에 "1\n" 하면 이건 또 아예 줄바꿈 전혀 없는 듯 보여주고요ㅋ

다른 분들 말씀 들어보니 일반적으로 자연스러운 형태로 만들어주는, 나름 합리적인 동작인 것 같습니다만, 저는 여전히 에디터 사용자가 파악하지 못하는 조작을 하는 느낌이라 탐탁치 않아하는 편입니다.

실제로 저걸 몰라서 엄청 헤맨 게... code golf 짜는데 도대체 이해할 수 없는 1바이트 추가분을 못 찾아서ㅎㅎㅎㅎ (원체 예외적인 경우긴 하죠)

좋은 하루 되세요!

익명 사용자의 이미지

(#include 가 개행문자를 추가해주지 않으므로) 소스 파일의 맨 마지막에 개행문자를 넣으라고 되어있습니다.
실제 컴파일러가 Warning을 내기도 하지요.

vi User == Unix User == C Programmer

아마도 위와 같은 등식이 성립한다고 볼 때, vi 설정으로는 적절한 기본값이 아니었을까 생각됩니다.

익명 사용자의 이미지

파일 끝에 개행문자가 없으면 대략 다음과 같은 느낌.

upriser$ more file.txt
Line one
Line two
Line threeupriser$

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.