设置 - 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: 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("\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上添加了一个类似(虽然不同)问题的提示:

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

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 回车没了,设置 - VIM在Fi结束时禁用自动换行相关推荐

  1. linux vim m,关于linux中使用vim打开文件出现^M的解决方法

    在linux下,不可避免的会用VIM打开一些windows下编辑过的文本文件.我们会发现文件的每行结尾都会有一个^M符号,这是因为 DOS下的编辑器和Linux编辑器对文件行末的回车符处理不一致, 各 ...

  2. linux系统vim下输入回车换行符号的解决方法

    linux系统vim下输入回车换行符号的解决方法 遇到问题 vim再linux 下回车后符号为'\r', 而不是我们想要的像windows下为'\r\n' 怎么解决呢?解决方法如下: 1. linux ...

  3. linux下vim 打开文件方式

    vim 打开文件方式 linux下使用vim打开文件可以使用两种方法: 一,  直接使用vim     XXX.txt   打开文件为xxx.txt的文件 二,在已经进入vim之后,要打开新的文件: ...

  4. 设置vim打开文件光标指在上次退出位置

    本人最近在使用vim编辑文件的过程中发现,打开文件光标总是停留在文件开头,特别麻烦,尤其是当文件比较大的时候. 于是想修改vim配置文件,让vim能记住上一次光标退出位置. 最终问题终于解决了,所以分 ...

  5. 解决vim打开之后乱码的问题

    实战: 在windows中编辑好的汉字文本文档,上传到Linux下打开乱码. [root@xuegod60 ~]# rpm -ivh /mnt/Packages/lrzsz-0.12.20-36.el ...

  6. vim的主题(colorscheme)设置

    1.vim的主题(colorscheme)设置 打开一个vim然后再normal模式下输入:color或者colorscheme 回车,可查看vim当前使用的主题    #:vim    输入 ' : ...

  7. linux文件明明存在却无法vim打开_教你几招,让你vim编辑器变得友善起来(特别水,不要点进来)...

    什么是 vim? Vim是从 vi 发展出来的一个文本编辑器.代码补完.编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用. 简单的来说, vi 是老式的字处理器,虽然功能还算齐全,但是现在 ...

  8. linux下vim编辑器插件,linux vim编辑器插件的安装和设置方法

    vim是一个很好的编程利器,如果配合上一些插件使用,简直堪比IDE 以下是本人自己的一些设置: 一.ctags(内置) 使用方法: 1 在源码目录创建tag文件 ctags -R 2 打开一个文件 把 ...

  9. git clone的源码在vim打开时是乱码

    2019独角兽企业重金招聘Python工程师标准>>> 起因:昨天从github clone源码时,有些readme.txt的文件在vim打开时变成了乱码.在网上找了一下答案,都说是 ...

最新文章

  1. 携程App for Apple Watch探索
  2. 语义分割--Mix-and-Match Tuning for Self-Supervised Semantic Segmentation
  3. 苹果开发(二) 申请应用
  4. Node.js~ioredis处理耗时请求时连接数瀑增
  5. 通过一个简单例子理解 RecyclerView.ItemDecoration
  6. 事件图谱是什么?它能预测未来吗?
  7. mysql显示nan_Python将dataframe连接到MySQL时出现NaN[mysqlconnector]
  8. 蓝桥杯 ALGO-101 算法训练 图形显示
  9. WinEdt10注册码
  10. 一文带你了解MultiBERT
  11. IP报文格式及各字段的意义
  12. PowerShell,AnkhSVN和Subversion
  13. 玩赚亚丁号---薅羊毛专业版
  14. 一淘网是马云手中的防守牌
  15. java halt_System.exit和Runtime halt区别
  16. VRP基础介绍:VRP基础
  17. 灰色预测模型_python
  18. 32位汇编语言学习笔记(45)--测试简单文件操作接口(完)
  19. Pdf转长图用什么软件,怎么操作Pdf转长图
  20. 【软件安装】Rational Rose 2007 安装过程(含资源)

热门文章

  1. python实现大数定理
  2. 当代最值得收藏的画家作品_当代最具收藏价值的画家:许敬如作品欣赏
  3. 科技爱好者周刊:第 72 期
  4. 【图床】图床、PicGo进行图片管理与上传
  5. [转]一个应届计算机毕业生的2012求职之路
  6. linux执行scp命令出错
  7. python的编码表_Python算法之旅列表的纷争之二进制编码
  8. vue + Element UI 动态Breadcrumb 面包屑的制作
  9. 【Python学习】(9)[Errno 2]No such file or directory:'calibri.ttf'
  10. 脚本不得关闭非脚本打开的窗口。Scripts may close only the windows that were opened by it...