zoukankan      html  css  js  c++  java
  • VIM于换行EOL的思考

    \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 的策略 手册上有详细说明

  • 相关阅读:
    使用Docker-compose部署MySQL测试环境
    使用MySQL SQL线程回放Binlog实现恢复
    MySQL 插件之 连接控制插件(Connection-Control)
    sysbench工具使用
    故障分析--主从复制故障1
    MySQL性能指标计算方式
    AJAX的 同步异步;EZView.js 图片预览和pdf预览
    Caused by: java.lang.ClassNotFoundException: org.springframework.context.App
    解决Myeclipse或Eclipse出现JPA project Change Event Handler问题的解决办法
    java中转换为string的方法;eques和==区别
  • 原文地址:https://www.cnblogs.com/mildcwen/p/7806681.html
Copyright © 2011-2022 走看看