我在一家PHP商店工作,我们都使用不同的编辑器,我们都必须在Windows上工作。我使用vim,但是店里的每个人都在抱怨,每当我编辑一个文件时,在底部有一个换行符。我四处搜索,发现这是vi & vim的记录行为…但我想知道是否有办法禁用这个功能。(这将是最好的,如果我可以禁用特定的文件扩展名)。
如果有人知道这事,那就太好了!
我在一家PHP商店工作,我们都使用不同的编辑器,我们都必须在Windows上工作。我使用vim,但是店里的每个人都在抱怨,每当我编辑一个文件时,在底部有一个换行符。我四处搜索,发现这是vi & vim的记录行为…但我想知道是否有办法禁用这个功能。(这将是最好的,如果我可以禁用特定的文件扩展名)。
如果有人知道这事,那就太好了!
当前回答
您是否可以使用一个特殊的命令来保存这些文件?
如果您执行:set binary,:w和:set nobinary,则如果文件开始时没有换行符,则写入文件时将不带换行符。
当然,这个命令序列可以放入用户定义的命令或映射中。
其他回答
可以从vim v7.4开始使用
:set nofixendofline
这里有一些关于这一变化的信息:http://ftp.vim.org/vim/patches/7.4/7.4.785。
我在Vim wiki上添加了一个类似(尽管不同)问题的提示:
http://vim.wikia.com/wiki/Do_not_auto-add_a_newline_at_EOF
也许你可以看看他们为什么抱怨。如果一个php文件在结尾?>后面有换行符,php将把它作为页面的一部分输出。这不是问题,除非您尝试在文件包含后发送头文件。
但是,php文件末尾的?>是可选的。没有结尾?>,在文件末尾使用换行符没有问题。
我想我找到了一个比公认答案更好的解决办法。其他的解决方案都不适合我,我不想一直在二进制模式下工作。 幸运的是,这似乎完成了工作,我还没有遇到任何讨厌的副作用:在文本文件的末尾保留丢失的行尾。我只是将整个内容添加到我的~/.vimrc。
好吧,你在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 <afile>
如果这是您第一次使用自动命令,请务必阅读关于自动命令的完整vim文档。有一些注意事项,例如,建议删除你的.vimrc中的所有autocmd,以防你的.vimrc可能被多次引用。