VIM在文件结束时禁用自动换行

所以我在一家PHP商店工作,我们都使用不同的编辑器,而且我们都必须在Windows上工作。 我使用vim,商店里的每个人都不停地抱怨,每当我编辑一个文件时,底部都会有一个换行符。 我搜索了四处,发现这是vi&vim的记录行为......但我想知道是否有某种方法来禁用此功能。 (如果我可以禁用特定的文件扩展名,这将是最好的)。

如果有人知道这件事,那太棒了!


即使该文件已在最后以新行保存:

vim -b file ,一次在vim中:

:set noeol
:wq

完成。

或者你也可以在vim中用:e ++bin file打开:e ++bin file

还有另一种选择:

:set binary
:set noeol
:wq

而对于Vim 7.4+,你也可以使用(最好在.vimrc上):

:set nofixendofline

(感谢罗泽轩的最新消息!)


将以下命令添加到.vimrc中以关闭行尾选项:

autocmd FileType php setlocal noeol binary fileformat=dos

但是,PHP本身会忽略最后的行尾 - 这不应该成为问题。 我几乎可以肯定,在你的情况下,还有其他的东西是添加最后一个换行符,或者可能是与windows / unix行末尾类型混合( nrn等)。

更新:

另一种解决方案可能是将此行添加到.vimrc中:

set fileformats+=dos

如果您使用Git进行源代码管理,还有另一种方法可以解决这个问题。 受到这里的答案的启发,我编写了自己的过滤器以供在gitattributes文件中使用。

要安装此过滤器,请将其保存为$PATH某处的noeol_filter ,使其可执行并运行以下命令:

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

要仅为自己开始使用过滤器,请将以下行放入$GIT_DIR/info/attributes

*.php filter=noeol

这将确保您不会在.php文件中的eof中提交任何新行,无论Vim如何。

而现在,剧本本身:

#!/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("rn"):
        sys.stdout.write(pline[:-2])
    elif len(pline) > 1 and pline.endswith("n"):
        sys.stdout.write(pline[:-1])
    else:
        sys.stdout.write(pline)
链接地址: http://www.djcxy.com/p/77239.html

上一篇: VIM Disable Automatic Newline At End Of File

下一篇: "No newline at end of file" compiler warning