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行末尾类型混合( n
或rn
等)。
更新:
另一种解决方案可能是将此行添加到.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