IT story

파일 끝에서 VIM이 자동 줄 바꿈 비활성화

hot-time 2020. 4. 13. 08:20
반응형

파일 끝에서 VIM이 자동 줄 바꿈 비활성화


그래서 저는 PHP 상점에서 일하고, 우리는 모두 다른 편집기를 사용하며, 우리는 모두 창에서 작업해야합니다. 나는 vim을 사용하고 있으며 상점의 모든 사람들은 파일을 편집 할 때마다 맨 아래에 줄 바꿈이 있다고 불평합니다. 나는 주변을 둘러 보았고 이것이 vi & vim의 문서화 된 행동이라는 것을 알았습니다 ...하지만이 기능을 비활성화 할 수있는 방법이 있는지 궁금합니다. (특정 파일 확장자에 대해 사용하지 않도록 설정하는 것이 가장 좋습니다).

누구든지 이것에 대해 알고 있다면 좋을 것입니다!


그리고 대한 vim7.4+ 당신은 (뉴스의 마지막 비트에 대한罗泽轩덕분에!) (당신의 .vimrc에 바람직)를 사용할 수 있습니다 :

:set nofixendofline

의 이전 버전에 관한 것입니다 vim.

파일이 끝에 새 줄로 이미 저장된 경우에도 :

vim -b file 그리고 한 번 vim에서 :

:set noeol
:wq

끝난.

또는 vim에서 파일을 열 수 있습니다 :e ++bin file

또 다른 대안 :

:set binary
:set noeol
:wq

.vimrc에 다음 명령을 추가하여 라인 끝 옵션을 설정하십시오.

autocmd FileType php setlocal noeol binary fileformat=dos

그러나 PHP 자체는 마지막 줄 끝을 무시합니다. 문제가되지는 않습니다. 나는 당신의 경우에 마지막 줄 바꿈 문자를 추가하는 다른 것이 있거나 아마도 Windows / Unix 줄 끝 유형 ( \n또는 \r\n등) 과 혼합되어있을 것이라고 확신합니다 .

최신 정보:

다른 해결책은이 줄을 .vimrc에 추가하는 것입니다.

set fileformats+=dos

소스 제어에 Git을 사용하는 경우 다른 방법으로 접근 할 수 있습니다. 여기대한 답변에서 영감을 얻어 gitattributes 파일 에 사용할 필터를 직접 작성했습니다 .

이 필터를 설치하려면 필터를 noeol_filter다른 곳에 저장 $PATH하고 실행 가능하게 한 후 다음 명령을 실행하십시오.

git config --global filter.noeol.clean noeol_filter
git config --global filter.noeol.smudge cat

자신 만의 필터 사용을 시작하려면 다음 줄을 입력하십시오 $GIT_DIR/info/attributes.

*.php filter=noeol

이렇게하면 .phpVim이 무엇을하든 eof에서 줄 바꿈을하지 않아도 됩니다.

그리고 지금, 스크립트 자체 :

#!/usr/bin/python

# a filter that strips newline from last line of its stdin
# if the last line is empty, leave it as-is, to make the operation idempotent
# inspired by: https://stackoverflow.com/questions/1654021/how-can-i-delete-a-newline-if-it-is-the-last-character-in-a-file/1663283#1663283

import sys

if __name__ == '__main__':
    try:
        pline = sys.stdin.next()
    except StopIteration:
        # no input, nothing to do
        sys.exit(0)

    # spit out all but the last line
    for line in sys.stdin:
        sys.stdout.write(pline)
        pline = line

    # strip newline from last line before spitting it out
    if len(pline) > 2 and pline.endswith("\r\n"):
        sys.stdout.write(pline[:-2])
    elif len(pline) > 1 and pline.endswith("\n"):
        sys.stdout.write(pline[:-1])
    else:
        sys.stdout.write(pline)

이 옵션을 시도하지 않았지만 다음 정보가 vim 도움말 시스템에 제공됩니다 (예 : help eol).

'endofline' 'eol'   boolean (default on)
            local to buffer
            {not in Vi}

When writing a file and this option is off and the 'binary' option
is on, no <EOL> will be written for the last line in the file.  This
option is automatically set when starting to edit a new file, unless
the file does not have an <EOL> for the last line in the file, in
which case it is reset.  

일반적으로이 옵션을 설정하거나 재설정 할 필요가 없습니다. 'binary'가 꺼져 있으면 파일을 쓸 때 값이 사용되지 않습니다. 'binary'가 켜져 있으면 파일의 마지막 행에 대한 존재를 기억하는 데 사용되므로 파일을 작성할 때 원본 파일의 상황을 유지할 수 있습니다. 그러나 원하는 경우 변경할 수 있습니다.

이전 질문에 대한 대답에 관심이있을 수도 있습니다. " 파일이 줄 바꿈으로 끝나야하는 이유 ".


Vim 위키에 비슷한 (그러나 다른) 문제에 대한 팁을 추가했습니다.

http://vim.wikia.com/wiki/Do_not_auto-add_a_newline_at_EOF


좋아, 당신은 Windows에서 일을 복잡하게합니다;)

'binary'옵션이 'fileformat'옵션을 재설정하고 ( 'binary'세트로 쓰는 것은 항상 유닉스 줄 끝으로 쓴다) 큰 망치를 꺼내서 외부 적으로 해보자!

BufWritePost 이벤트에 대한 자동 명령 (: help autocommand)을 정의하는 것은 어떻습니까? 이 자동 명령은 전체 버퍼를 쓸 때마다 실행됩니다. 이 자동 명령에서 방금 작성된 파일의 마지막 줄 바꿈을 제거하는 작은 외부 도구 (php, perl 또는 기타 스크립트)를 호출하십시오.

따라서 이것은 다음과 같이 보일 것이고 .vimrc 파일로 갈 것입니다 :

autocmd!   "Remove all autocmds (for current group), see below"
autocmd BufWritePost *.php !your-script <afile>

자동 명령을 처음 다루는 경우 자동 명령에 대한 전체 vim 설명서를 읽으십시오. 몇 가지주의 사항이 있습니다. 예를 들어 .vimrc가 여러 번 소스 될 수있는 경우 .vimrc에서 모든 autocmds를 제거하는 것이 좋습니다.


Vim 내부에서 실행되거나 (언어 지원으로 컴파일 된 경우) 외부 Perl 스크립트를 통해 Perl 및 Python 사후 처리를 통해 Blixtor의 제안을 구현했습니다. vim.org 에서 PreserveNoEOL 플러그인 으로 제공됩니다 .


어쩌면 당신은 그들이 불평하는 이유를 볼 수 있습니다. 종료?> 다음에 PHP 파일에 줄 바꿈이 있으면 php가 페이지의 일부로 출력합니다. 파일이 포함 된 후 헤더를 보내려고하지 않으면 문제가되지 않습니다.

그러나 PHP 파일 끝의?>는 선택 사항입니다. 파일 끝에서 줄 바꿈에 아무런 문제가 없습니다.


.vimrc에 추가합니다

set binary

그리고 도움이됩니다.


나는 받아 들인 대답보다 더 나은 해결책을 찾았다 고 생각합니다. 대안 솔루션이 나를 위해 작동하지 않았으며 항상 바이너리 모드로 작업하고 싶지 않았습니다. 다행히도 이것은 작업을 완료 한 것으로 보이며 아직 불쾌한 부작용을 경험하지 못했습니다. 텍스트 파일 끝에 줄 끝을 유지하십시오 . ~ / .vimrc에 모든 것을 추가했습니다.


이 파일을 저장하기 위해 특별한 명령을 사용할 수 있습니까?

: set binary, : w 및 : set nobinary를 수행하면 시작할 파일이 없으면 줄 바꿈없이 파일이 작성됩니다.

이 명령 시퀀스는 물론 사용자 정의 명령 또는 매핑에 넣을 수 있습니다.


이 vimscript 플러그인이이 상황에 도움이된다는 것을 알았습니다.

Plugin 'vim-scripts/PreserveNoEOL'

또는 github 에서 더 읽으십시오


vimv7.4 부터는 사용할 수 있습니다

:set nofixendofline

여기에 해당 변경 사항에 대한 정보가 있습니다. http://ftp.vim.org/vim/patches/7.4/7.4.785 .

참고 URL : https://stackoverflow.com/questions/1050640/vim-disable-automatic-newline-at-end-of-file

반응형