admin 管理员组

文章数量: 887021

vim 打开php 回车没了,设置

设置 - VIM在Fi结束时禁用自动换行

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

如果有人知道这一点,那就太好了!

12个解决方案

275 votes

即使文件最后已用新行保存:

:e ++bin file  并且一旦进入vim:

:set noeol

:wq

完成。

或者您可以使用:e ++bin file在vim中打开文件

另一种选择:

:set binary

:set noeol

:wq

对于vim 7.4+,你也可以使用(最好是你的.vimrc):

:set nofixendofline

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

gcb answered 2019-03-05T20:16:13Z

22 votes

将以下命令添加到.vimrc以转换行尾选项:

autocmd FileType php setlocal noeol binary fileformat=dos

但是,PHP本身将忽略最后一行 - 它应该不是问题。 我几乎可以肯定,在你的情况下,还有其他东西正在添加最后一个换行符,或者可能有一个混合使用windows / unix行结束类型(\n或\r\n等)。

更新:

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

set fileformats+=dos

too much php answered 2019-03-05T20:16:53Z

17 votes

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

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

git config --global filter.noeol.clean noeol_filter

git config --global filter.noeol.smudge cat

要仅为自己开始使用过滤器,请在.php中添加以下行:

*.php filter=noeol

这将确保您不会在.php文件中提交任何换行符,无论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:

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)

Amir answered 2019-03-05T20:17:47Z

11 votes

我没有尝试过这个选项,但是在vim帮助系统中给出了以下信息(即帮助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 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 for the last line in the file, in

which case it is reset.

通常你不必设置或   重置此选项。 当'二进制'是   写入时不使用off值   文件。 当“二进制”打开时,它就是   曾经记得a的存在    对于文件中的最后一行,   这样当你写文件时   来自原始文件的情况可以   被保存。 但是你可以改变它   想要。

您可能对前一个问题的答案感兴趣:“为什么文件应以换行符结尾”。

Tim Henigan answered 2019-03-05T20:18:25Z

10 votes

我在Vim wiki上添加了一个类似(虽然不同)问题的提示:

[]

Jo Liss answered 2019-03-05T20:18:56Z

8 votes

好的,你在Windows上使事情变得复杂;)

由于'binary'选项重置了'fileformat'选项(并且用'binary'设置写入总是用unix行结尾写),让我们拿出大锤子并在外部执行!

如何为BufWritePost事件定义自动命令(:help autocommand)? 每次编写整个缓冲区后都会执行此自动命令。 在这个自动命令中调用一个小的外部工具(php,perl或任何脚本)来剥离刚刚写入的文件的最后一个换行符。

所以这看起来像这样,并将进入你的.vimrc文件:

autocmd! "Remove all autocmds (for current group), see below"

autocmd BufWritePost *.php !your-script

如果这是您第一次处理自动命令,请务必阅读有关自动命令的整个vim文档。 有一些警告,例如 如果您的.vimrc可能多次获取,建议删除.vimrc中的所有autocmds。

Blixtor answered 2019-03-05T20:19:49Z

6 votes

我已经用Perl和Python后处理实现了Blixtor的建议,要么在Vim中运行(如果它是用这种语言支持编译的话),要么是通过外部Perl脚本。 它可以在vim.org上作为PreserveNoEOL插件使用。

Ingo Karkat answered 2019-03-05T20:20:14Z

3 votes

也许你可以看看他们为什么抱怨。 如果一个php文件在结尾后有一个换行符?&gt ;, php将把它作为页面的一部分输出。 除非您尝试在包含文件后发送标头,否则这不是问题。

但是,?> 在php文件的末尾是可选的。 没有结束?>,文件末尾的换行没问题。

Ken answered 2019-03-05T20:20:46Z

2 votes

我加入.vimrc

set binary

它有帮助,试试吧

IvanM answered 2019-03-05T20:21:18Z

2 votes

我想我找到了比接受的答案更好的解决方案。 替代解决方案对我不起作用,我不想一直以二进制模式工作。幸运的是,这似乎完成了工作,我还没有遇到任何令人讨厌的副作用:在文本文件末尾保留缺少的行尾。 我刚把整个东西添加到〜/ .vimrc中。

Jay Paroline answered 2019-03-05T20:21:45Z

1 votes

您是否可以使用特殊命令来保存这些文件?

如果你这样做:设置二进制,:w和:set nobinary,如果没有可以开始的话,文件将被写入而没有换行符。

当然,这一系列命令可以放入用户定义的命令或映射中。

Blixtor answered 2019-03-05T20:22:23Z

0 votes

我发现这个vimscript插件对这种情况很有帮助。

Plugin 'vim-scripts/PreserveNoEOL'

或者在github上内容

Alan Dong answered 2019-03-05T20:22:55Z

本文标签: vim 打开php 回车没了 设置