\n LF 0A 将当前光标切换到下一行(不一定行首)
\r CR OD 将当前光标置于行首

在windows与unix系统中,unix将\n代表换行并置于行首,而windows保持原意。
即unix:\n为换行,windows:\r\n为换行.

在ASCII码中,00-1F为不可显示字符。而40为@,41-5A为A-Z.
于是出现了用CTRL+字母键 实现其相应功能键的用法.

比如在linux的bash中,<c-h>退格,<c-j>换行,等等。
同样在VIM中,用^M来显示\r,^J来显示回车,^[显示ESC,
以及将这些键映射到了对应按键( <c-[>ESC,<c-j>回车 ),方便输入。而对于退格BS显示为<80>kb而不是^H,这就不清楚了...

===========================================================================================

当我们用VIM /"\n"搜索时,结果往往匹配不到,说明此时buffer中,并没有\n,亦即 0A,这个编码。
也就是说VIM在load buffer时已经删除了。
而注意到 当我们敲回车输入时,显示的是^J,,那么我推测vim中^J不是OA,

导致这个结论还有一个因素:
INSERT模式下,<c-v>可用于通过编码输入字符,或输入功能键的编码,但是!我按<c-v><c-j>时,
却显示的不是^J,而是^@,^@代表NUL,即插入编码00,而非0A.
发现了什么?vim将我们输入的\n给替换了!!

因而vim中,^J只是代表了一个回车,但他并没有插入编码其OA,
换句话说,当我们按回车时,vim只是插入了一个标记<eol>代表换行。而vim将这个标记<eol>显示为^J!

直至写入文件时才用相应的编码进行替换。且!vim不允许输入\n,哪怕你用substitute替换的\n它都会给
你换成^@,这应该是本身的一种保护机制把

--------------------------------------------------------------------------------------
其实上面的这些猜测在' fileformat '里已有说明:

This gives the <EOL> of the current buffer, which is used for
reading/writing the buffer from/to a file:
dos <CR> <NL>
unix <NL>
mac <CR

This option is set automatically when starting to edit a file and
'fileformats' is not empty and 'binary' is off.

而根据ffs设置ff 的策略 手册上有详细说明

VIM于换行EOL的思考的更多相关文章

  1. vim 处理换行符

    1. 设置文件格式 :set fileformats=unix,dos 2. 查询当前文件格式 :set fileformat? 3. 转换文件格式 :set fileformat=dos 4. 设置 ...

  2. 关于Vim/Neovim/SpaceVim的一些思考

    1 前言 最近看到了Neovim以及SpaceVim,于是上手试了一下. 2 Neovim与SpaceVim Neovim是Vim的一个分支,具有更加现代的GUI.嵌入式以及脚本化的终端.异步工作控制 ...

  3. vim使用札记

    最近开始用vim编辑器了,从最开始的配置到现在慢慢使用,我在这儿会贴出一些我的使用上遇到过的问题和如何解决的方案,留给自己和一些会用到的人看看 1.vim怎么使汇编语法高亮 开始不知道,然后把文件的后 ...

  4. vim粘贴缩进问题

    vim不支持直接从其他应用复制内容粘贴过来,而是模拟用户键盘输入来实现的,一般设置vim在换行时自动以上一行的的缩进为初始位置,这样就会导致复制过来的内容出现缩进错乱. set paste 解决粘贴乱 ...

  5. linux 删除换行符

    今天需要删除文件里面的换行符,比如有一个文件a.txt: 1,2,3 4,5,6 1,2,3 4,5,6 1,2,3 4,5,6 1,2,3 4,5,6 1,2,3 4,5,6 1.使用vim删除换行 ...

  6. linux和普通文本的换行问题

    情景一: 普通文本 vim操作换行   :%s#xxx#\n#g 情景二: linux环境换行 vim   :%s#xxx#\r#g

  7. vim 知识点小结

    vim用法可以学习:vim用法 Vim修改tab为4个空格 vi /etc/vim/vimrc 添加:set ts=4 vim中翻页的快捷键:向上翻页 ctrl+b,向下翻页 ctrl+f vim替换 ...

  8. 网易云课堂_C++程序设计入门(上)_第5单元:万类霜天竞自由 – 对象和类的更多内容_第5单元作业【4】 - 在线编程(难度:难)

    第5单元作业[4] - 在线编程(难度:难) 查看帮助 返回   温馨提示: 1.本次作业属于Online Judge题目,提交后由系统即时判分. 2.学生可以在作业截止时间之前不限次数提交答案,系 ...

  9. C++ code:for loop designs

    1  用for循环编出系列图形 该图形一共10行,每一行增加一个字符,所以应循环10次,每次输出一行.其循环模式为: :i<=;++i) { 输出第i行 换行 } 我们注意到,每一行长度的变化正 ...

随机推荐

  1. ASP.NET Core 2.0 支付宝当面付之扫码支付

    前言 自从微软更换了CEO以后,微软的战略方向有了相当大的变化,不再是那么封闭,开源了许多东西,拥抱开源社区,.NET实现跨平台,收购xamarin并免费提供给开发者等等.我本人是很喜欢.net的,并 ...

  2. 逆波兰表达式(RPN)算法简单实现

    算法分析: 一.预处理 给定任意四则运算的字符串表达式(中缀表达式),preDeal预先转化为对应的字符串数组,其目的在于将操作数和运算符分离. 例如给定四则运算内的中缀表达式: String inf ...

  3. 将 C# 枚举反序列化为 JSON 字符串 实践

    一.定义枚举 public enum SiteTypeEnum { 中转部 = 1, 网点 = 2 } 还有 BooleanEnum 和 OptTypeEnum 这两个枚举,这里暂且省略了它们的定义. ...

  4. Scrapy框架--Requests对象

    Scrapy使用request对象来爬取web站点. request对象由spiders对象产生,经由Scheduler传送到Downloader,Downloader执行request并返回resp ...

  5. 关于string.h中字符串的操作

     string.h中字符操作的函数 注意:**对字符数组的多次操作需要进行赋初值.或者善于用memset()函数进行清空数组的操作.**     否则容易出现错误. string.h文件中函数的用法加 ...

  6. 解决由于VNC日志导致服务器磁盘100%

    今天通过SSH连接服务器看到磁盘直接100%了.于是通过 sudo du -h --max-depth=1 发现某个用户下面占用了100个G.于是切换进去看了一下.发现VNC的log占满了整个磁盘.然 ...

  7. 用Eclipse 搭建一个Maven Spring SpringMVC 项目

    1: 先创建一个maven web  项目: 可以参照之前的文章:  用Maven 创建一个 简单的 JavaWeb 项目 创建好之后的目录是这样的; 2: 先配置maven  修改pom.xml & ...

  8. DOS和windows的区别?

    2017-09-25  19:18:03 本质:都是微软公司的操作系统,某种从程度上说windows是dos的后续操作系统版本.只是windows相比dos有质的飞跃.dos只支持命令操作,windo ...

  9. 使用Angularjs和Vue.js对比

    使用Angularjs和Vue.js对比 之前项目都是使用Angularjs,(注明此处主要讲Angularjs 1)在初步使用Vue.js后做一个简答的对比笔记. 首先从理论上简单说一下各自的特点, ...

  10. CentOs 系统启动流程相关

    CentOS的启动流程 1)加载BIOS 的硬件信息,获取第一个启动设备 2)读取第一个启动设备MBR 的引导加载程序(grub) 的启动信息 3)加载核心操作系统的核心信息,核心开始解压缩,并尝试驱 ...