Có một cách khác để tiếp cận điều này nếu bạn đang sử dụng Git để kiểm soát nguồn. Lấy cảm hứng từ một câu trả lời ở đây , tôi đã viết bộ lọc của riêng mình để sử dụng trong tệp gitattribut .
Để cài đặt bộ lọc này, hãy lưu nó dưới dạng noeol_filter
một nơi nào đó trong của bạn $PATH
, làm cho nó có thể thực thi được và chạy các lệnh sau:
git config --global filter.noeol.clean noeol_filter
git config --global filter.noeol.smudge cat
Để chỉ bắt đầu sử dụng bộ lọc, hãy đặt dòng sau vào $GIT_DIR/info/attributes
:
*.php filter=noeol
Điều này sẽ đảm bảo bạn không cam kết bất kỳ dòng mới nào tại eof trong một .php
tệp, bất kể Vim làm gì.
Và bây giờ, chính kịch bản:
#!/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: /programming/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)