파일 끝에서 VIM이 자동 줄 바꿈 비활성화
그래서 저는 PHP 상점에서 일하고, 우리는 모두 다른 편집기를 사용하며, 우리는 모두 창에서 작업해야합니다. 나는 vim을 사용하고 있으며 상점의 모든 사람들은 파일을 편집 할 때마다 맨 아래에 줄 바꿈이 있다고 불평합니다. 나는 주변을 둘러 보았고 이것이 vi & vim의 문서화 된 행동이라는 것을 알았습니다 ...하지만이 기능을 비활성화 할 수있는 방법이 있는지 궁금합니다. (특정 파일 확장자에 대해 사용하지 않도록 설정하는 것이 가장 좋습니다).
누구든지 이것에 대해 알고 있다면 좋을 것입니다!
그리고 대한 vim
7.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
이렇게하면 .php
Vim이 무엇을하든 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 에서 더 읽으십시오
vim
v7.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
'IT story' 카테고리의 다른 글
사전에 키가 포함되어 있는지 확인하는 것이 왜 더 빠르지 않은지 예외를 잡는 것보다 더 빠른 이유는 무엇입니까? (0) | 2020.04.13 |
---|---|
Linux에서 지연 및 손실 된 패킷 시뮬레이션 (0) | 2020.04.13 |
JavaScript에서 then () 함수는 무엇을 의미합니까? (0) | 2020.04.13 |
각도에서 (change) vs (ngModelChange) (0) | 2020.04.13 |
Kafka를 통해 RabbitMQ를 사용해야하는 이유가 있습니까? (0) | 2020.04.13 |