Dosyanın sonunda VIM Otomatik devre dışı Newline

10 Cevap php

Yani bir PHP dükkanda çalışmak, ve hepimiz farklı editörleri kullanmak, ve biz tüm pencerelerin üzerinde çalışmak zorunda. Ben vim'den kullanın ve dükkanda herkes bir dosyayı düzenlemek zaman altta bir satır olduğunu şikayet tutar. Etrafa arandı ve bu vi ve belgelenmiş bir davranış olduğunu gördük vim ... ama bu özelliği devre dışı bırakmak için bir yol olup olmadığını merak ediyordum. (Ben özel dosya uzantıları için bunu devre dışı bırakabilirsiniz eğer iyi wouldbe).

Herkes bu konuda biliyorsa, bu harika olurdu!

10 Cevap

Ben (bu tür dil desteği ile derlenmiş ise) Vim içinde çalışan, ya da harici bir Perl komut dosyası üzerinden ya, Perl ve Python post-processing ile Blixtor önerileri uyguladık. Bu vim.org üzerinde PreserveNoEOL plugin olarak mevcut bulunuyor.

. Sonu-line seçeneği açmak için vimrc için aşağıdaki komutu ekleyin:

autocmd FileType php setlocal noeol binary fileformat=dos

However, PHP'nin kendisi geçen sonu satırı görmezden - bu bir sorun olmamalı. Ben, sizin durumunuzda muhtemelen son satır karakteri, ya da türleri (\n veya \r\n biten Windows / Unix hattı ile birarada olduğunu ekliyor başka bir şey olduğunu hemen hemen eminim vb.)

Update:

. Alternatif bir çözüm sadece vimrc için bu satırı eklemek olabilir:

set fileformats+=dos

dosya zaten sonunda yeni hatları ile kaydedilmiş olsa bile:

vim -b file and once in vim:

:set noeol
:wq

yapılır.

alternatif :e ++bin file ile vim dosyaları açabilirsiniz

Yine başka bir alternatif:

:set binary
:set noeol
:wq

Kaynak denetimi için Git kullanıyorsanız bu yaklaşım başka bir yolu yoktur. an answer here esinlenerek, ben bir gitattributes dosyasında kullanılmak için kendi filtre yazdı.

Bu filtreyi yüklemek için, noeol_filter yerde olarak kaydedebilirsiniz için $PATH, çalıştırılabilir hale, ve aşağıdaki komutları çalıştırın:

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

Sadece kendiniz için filtre kullanarak başlatmak için, aşağıdaki satırı koymak için $GIT_DIR/info/attributes:

*.php filter=noeol

Bu olursa olsun Vim ne, bir .php dosyasındaki eof herhangi satırsonunu taahhüt yok emin olacaktır.

Ve şimdi, komut kendisi:

#!/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: http://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)

Ben bu seçeneği denemedim, ancak aşağıdaki bilgiler vim yardım sistemi (yani yardım eol) verilmiştir:

'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.

Normally you don't have to set or reset this option. When 'binary' is off the value is not used when writing the file. When 'binary' is on it is used to remember the presence of a for the last line in the file, so that when you write the file the situation from the original file can be kept. But you can change it if you want to.

Siz de bir önceki soruya cevap ilginizi çekebilir: "Why should files end with a newline".

Ben sorunu (farklı olsa da) benzer bir için Vim wiki üzerinde bir ipucu ekledim:

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

Tamam, Windows üzerinde olan şeyler zorlaştırmaktadır ;)

'Ikili' seçeneği 'fileformat' seçeneğini (ve 'ikili' Unix satır sonları yazıyor, her zaman set ile yazılı) sıfırlar olarak, en büyük çekiç dışarı atalım ve dışarıdan bunu!

Nasıl Autocommand tanımlama hakkında: BufWritePost etkinlik için (yardım AUTOCOMMAND)? Bu AUTOCOMMAND bir bütün tampon yazmak her zaman sonra yürütülür. Bu AUTOCOMMAND çağrısı sadece yazılı dosyanın son yeni satır kapalı şeritler küçük bir harici aracı (php, perl veya ne olursa olsun komut dosyası).

Yani bu böyle bir şey olmazdı ve vimrc dosyasına girecek.:

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

Bu autocommands ile ilgili ilk defa ise autocommands ilgili tüm vim belgeleri okumak için emin olun. Bazı uyarılar, örneğin Bu durumda sizin. vimrc birden çok kez kaynaklı alabilirsiniz sizin. vimrc tüm autocmds kaldırmak için önerilir.

Belki onlar neden şikayet ediyorlar bakmak olabilir. Sayfasının bir parçası olarak bir php dosyası bittikten sonra bir yeni satır varsa?>, Php irade çıktı onu. Eğer dosya bulunur sonra başlık göndermek denemek sürece bu bir sorun değildir.

Bununla birlikte,> bir php dosyanın sonuna isteğe bağlıdır. Biten hiçbir?>, Dosyanın sonuna bir satır ile bir sorunum yok.

Bu dosyaları kaydetmek için özel bir komut kullanmak için mümkün olabilir mi?

Eğer yoksa: ikili set,: w ve: ile başlamak hiçbiri olsaydı dosyanın nobinary ayarlamak Yenisatır olmadan yazılır.

Bu komutlar dizisi elbette, bir kullanıcı tanımlı komut veya bir eşleme içine koymak olabilir.

Ben. Vimrc eklemek

set binary

ve yardımcı olur, bunu deneyin