VIM 이진 모드의 결과


1

vim줄 바꿈없이 파일을 저장하는 나의 레시피 는 다음과 같습니다.

:set binary
:set noeol
:wq

noeol이 바이너리 모드 없이는 아무것도하지 않는다는 사실은 그 자체로 이상합니다. 그러나 :help binary내가 읽는 것은 여전히 뭔가가 확실하지 않습니다.

 When this option is switched on a few
        options will be changed (also when it already was on):
                'textwidth'  will be set to 0
                'wrapmargin' will be set to 0
                'modeline'   will be off
                'expandtab'  will be off
        Also, 'fileformat' and 'fileformats' options will not be used, the
        file is read and written like 'fileformat' was "unix" (a single <NL>
        separates lines).
        The 'fileencoding' and 'fileencodings' options will not be used, the
        file is read without conversion.
        NOTE: When you start editing a(nother) file while the 'bin' option is
        on, settings from autocommands may change the settings again (e.g.,
        'textwidth'), causing trouble when editing.  You might want to set
        'bin' again when the file has been loaded.

여전히 UTF8 문자를 볼 수 있으므로 파일 인코딩이 완전히 사라지지 않았습니다. 나는 expandtab을 사용하지 않았다. 그러나 그 외에도 실제로 어떤 일이 일어날 수 있습니까?

나는 파일 끝에 새로운 줄이 피곤하고 모든 파일을 이진 모드로 열고 기본적으로 noeol을 설정하는 것을 고려하고 있습니다. 많은 문제가 있습니까?


5
이 답변이 문제를 설명하려고 : stackoverflow.com/a/16224292/593264를 즉, EOL 문자는 라인의 끝을 표시하도록되어, 다른 편집자는 "잘못"는 EOL 문자 뒤에이 같은이있는 새 줄을 해석 . 다른 각도에서 볼 때 여분의 선은 다른 편집자에게 유용합니다. 왜냐하면 선의 끝으로 이동하고 Enter 키를 눌러야하지만 vi (m)에서는 물론을 눌러 o새 선을 열 수 있기 때문입니다. 또는 더 다르게 말하면, 미용상의 이유를 넘어선 추가 라인에 문제가 있습니까?
nitro2k01

네, 텍스트는 텍스트입니다. 모든 권한을 갖고 싶습니다. 다른 편집기에서 말했듯이 간단히 거기에 가서 Enter 키를 누르거나 줄 바꿈을 삭제할 수 있습니다. vim에서 그것은 저쪽에 있습니다. 그러나 더 실용적인 예제를 원한다면 몇 가지 텍스트를 이진 형식으로 나열 할 수 있습니다. 또는 더 풍부, 기술적으로하기 때문에 그 줄 바꿈을 삽입하는 PHP는 문제 ?> 태그 그래서 그것은 그가 처리됩니다 코드 앞에 필요 포함되어있는 경우 문제를 일으킬 수있는, 출력 할 내용의 일부입니다 쿠키 또는 기타 헤더.
gcb

2
아! 이것이 실제 문제입니다. 이에 대한 권장 솔루션은 간단히 ?>제어 할 수있는 방식으로 해당 문제를 제거하는 것입니다. 그렇습니다, 그것은 유효한 PHP입니다.
nitro2k01

이것은 예 중 하나였습니다. 대부분의 편집자들은 그 마지막 줄을 나누지 않으므로 버전 관리 소프트웨어를 커밋해야합니다. PHP가 크지 않기 때문에 큰 것은 없지만 그것은 OCD를 귀찮게합니다.
gcb

vi (m)에 관한 한, 줄의 구문은 텍스트 다음에 줄 종결자가옵니다. c ;의 문장 이 끝나 거나 영어 문장 이 끝나는 방식과 비슷합니다 .. 터미네이터는 객체에 필수적입니다. vi (m)과 관련하여 터미네이터가없는 행은 구문 상 유효하지 않은 텍스트이므로 텍스트가 아닌 파일을 원하는 방식으로 편집하려면 이진 모드를 활성화해야합니다. vi (m)은 행을 엔티티로 간주하는 반면 다른 편집기는 키 입력 (예 : enter)을 개별 문자 (예 :)로 버퍼에 넣습니다 \n. 우연한 결정이 아니라 철학의 차이입니다.
nitro2k01

답변:


1

임의의 인코딩 (예 : 모든 ASCII 또는 Vim과 일치하는 인코딩)이 발생하지 않고 ^MWindow 파일 끝이 있는 in 파일에 의해 방해받지 않으면 접근 방식이 올바르게 작동합니다.

Vim은 그러한 파일들을 편집하기위한 것이 아니었다 (Unix 입장에서는 불완전하다). 그러나 내 PreserveNoEOL 플러그인 은 더 편안하게 만들려고하므로 역학에 대해 걱정할 필요가 없습니다.


와우 그것은 거대한 확장입니다. 나는 그것을 읽고 시험해 볼 것이다. 나는 과거에 다른 것들을 사용했습니다. 대부분의 사람들은 내 생각에 보통 같은 작업을 수행하므로 동일한 결과를 얻거나 저장 후 파일의 마지막 바이트를 지 웁니다. 두 경우 모두 편집하는 동안 파일 시스템에 커밋하는 변경 사항이 표시되지 않습니다.
gcb
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.