首页 文章

如何在vim中打开的文件中将^ M换行符转换为'normal'换行符?

提问于
浏览
444

vim显示在每行结尾^ M

我如何用“正常”换行符替换它?

30 回答

  • 0

    这对我有用:

    • 将文件格式设置为unix( \n 行结束)

    • 保存文件

    所以在vim中:

    :set ff=unix
    :w
    
  • 34

    我花了一个下午与\ n ctrl-v 012挣扎(两者都为我提供了null) . 并通过这个线程努力,直到我达到metagrapher的 .

    \r 对我来说很好!

    /),/s/),/)\r/g
    

    变成了这样的东西:

    blacklist-extra:i386(0.4.1,0.4.1 nmu1),libmount1:i386(2.20.1-5.1,2.20.1 -5.2),libblkid1:i386(2.20.1-5.1,2.20.1-5.2) ,libapt-pkg4.12:i386(0.9.7.4,0.9.7.5),nmap:i386(6.00-0.1,6.00-0.2),libsane-common:i386(1.0.22-7.3,

    变成这样的东西:

    26 libwv-1.2-4:i386(1.2.9-3,自动)27 openjdk-6-jre-headless:i386(6b24-1.11.4-3,自动)28 jed:i386(0.99.19-2.1)

    魔法 . 我非常感激

  • 9

    这个问题有很多其他答案,但是,以下对我来说最好,因为我需要一个命令行解决方案:

    vim -u NONE -c 'e ++ff=dos' -c 'w ++ff=unix' -c q myfile
    

    说明:

    • 如果不加载任何.vimrc文件,请打开 myfile

    • 运行 :e ++ff=dos 强制重新加载整个文件作为dos行结尾 .

    • 运行 :w ++ff=unix 以使用unix行结尾写入文件

    • 退出vim

  • 1

    为了使^ M字符匹配,我必须在视觉上选择它,然后使用OS copy to clipboard命令来检索它 . 您可以在尝试之前搜索角色来测试它替换命令 .

    /^M
    

    应该选择第一个坏线

    :%s/^M/\r/g
    

    将用回车代替所有错误的^ M.

    这是MacVim中的功能,它基于gvim 7 .

    EDIT:

    在我的Windows 10计算机上再次出现此问题,该计算机具有Ubuntu for Windows,我认为这会导致vim的文件格式问题 . 在这种情况下,将ff更改为unix,mac或dos只会将^ M更改为^ J并再次返回 .

    在这种情况下的解决方案:

    :%s/\r$/ /g
    :%s/ $//g
    

    我走这条路的原因是因为我想确保我对我的文件没有破坏性 . 我可以 :%s/\r$//g 但是这会立即删除回车,并且可能会有意想不到的结果 . 相反,我们将单个CR字符(这里是一个^ M字符)转换为空格,然后删除行末尾的所有空格(无论如何,这对我来说都是理想的结果)

    很抱歉恢复了一个早已被回答的旧问题,但似乎有一些混乱,我认为我会帮助清除一些,因为这在谷歌搜索中很高 .

  • 21

    Ctrl M最小化我的窗口,但Ctrl Enter实际上插入了 ^M 字符 . 我还必须确保不要在按下之间取下Ctrl键 .

    所以我的解决方案是:

    :%s/<Ctrl-V><Ctrl-Enter>/\r/g
    

    其中 <Ctrl-V><Ctrl-Enter> 表示 press and hold Ctrl,按下并释放V,按下并释放回车, and then release Ctrl .

    如果您正在处理Windows生成的文件

    上面的解决方案将在现有行之间添加一条额外的行,因为 ^M 之后已经有一个不可见的 \r .

    要防止这种情况,您需要删除 ^M 字符而不替换它们 .

    :%s/<Ctrl-V><Ctrl-Enter>//g
    

    % 表示"in this buffer," s 表示"substitute," / 表示"(find) the following pattern," <Ctrl-V><Ctrl-Enter> 表示按下以获取 ^M 字符的键(见上文), // 表示"with nothing"(或"with the pattern between these two slashes, which is empty"), g 表示 flag 表示"globally,",而不是第一次出现一条线 .

  • 6

    我知道这可能太旧了,但希望有人能发现它有用 .

    使用这些命令:

    :%s/\r//g
    

    要么

    :%s/\r\(\n\)/\1/g
    
  • 175

    或者,您可以使用此命令修复换行符,而不是使用vim

    fromdos <filename.txt>
    

    希望能帮助到你!

  • 5

    首先,使用 :set ff? 来确定文件的文件格式 .

    我想它可能是 unix ,那么问题是你的文件是用 fileformat=dos 创建的,将"^M^J"添加到行尾,但只读 flieformat=unix 只从行末端删除"^J",留下"^M" .

    只需在Vim命令行输入 :e ++ff=dos 即可将文件格式从unix更改为dos . 它应该解决问题 . 如果没有, :%s/\r//g 应该帮助你 .

  • 99

    我在 MacVim 中看到的用BBEdit创建的文件显示了一堆 ^M 行返回而不是常规返回 . 以下字符串替换解决了问题 - 希望这有助于:

    :%s/\r/\r/g
    

    这很有趣,因为我用相同的字符替换换行符,但我想Vim只需要一个新的\ r来正确显示 . 我有兴趣了解其原因的基本机制 .

  • 1

    无需使用Ctrl: :%s/\r$//

  • 0

    这对我有用:

    :% s/\r\n/\r
    
  • 12
    :g/^M/s// /g
    

    如果您使用 Shift+6 Caps+M 键入 ^M ,则不接受 .

    您需要输入 ctrl+v ctrl+m .

  • 1

    只需删除.vimrc中的 set binary 即可!

  • 8

    save keystrokes ,您可以通过将其放在映射中来避免键入Ctrl VCtrl M.只需打开一个包含^ M字符的文件,将其拉出,然后将其粘贴到.vimrc中的这样的行中:

    nnoremap <Leader>d :%s/^M//g<CR>
    
  • 5

    ^M 给出了不需要的换行符 . 为了解决这个问题,我们可以使用 sed 命令,如下所示:

    sed 's/\r//g'
    
  • 0

    在使用vim和eclipse时,这些建议都没有为我设法获得 ^M 换行符 . 我怀疑我遇到了一个外部案件,但万一我能帮助任何人 .

    :%s/.$//g
    

    它解决了我的问题

  • 7
    sed s/^M//g file1.txt > file2.txt
    

    其中^ M是通过同时按下3个键来键入的,ctrl v m

  • 12

    在Linux和Mac OS上,以下工作,

    :%s/^V^M/^V^M/g
    

    其中 ^V^M 表示键入Ctrl V,然后按Ctrl M.

    注意:在Windows上,您可能希望使用^ Q而不是^ V,因为默认情况下^ V被映射到粘贴文本 .

  • 1

    简单的事情对我有用

    dos2unix   filename
    
  • 1

    就我而言,

    没有上面的工作,我有一个CSV文件从我的Mac复制到Linux机器,我使用了上述所有命令,但没有任何帮助,但下面的一个

    tr "\015" "\n" < inputfile > outputfile
    

    我有一个文件,其中^ M个字符在下面的行之间被切换

    Audi,A4,35 TFSi Premium,,CAAUA4TP^MB01BNKT6TG,TRO_WBFB_500,Trico,CARS,Audi,A4,35 TFSi Premium,,CAAUA4TP^MB01BNKTG0A,TRO_WB_T500,Trico,
    
  • 14

    如果文件是在Windows上创建的,请使用dos2unix实用程序,如果文件是在mac上创建的,请使用mac2unix实用程序 . :)

  • 90

    这是唯一对我有用的东西:

    :e ff = dos

    发现于:http://vim.wikia.com/wiki/File_format

  • 27

    我用sed做了这个:

    sed -i -e 's/\r/\n/g' filename

  • 524

    或者,有一些名为dos2unix和unix2dos的开源实用程序可以执行此操作 . 在Linux系统上,它们可能默认安装;对于Windows系统,您可以从http://www.bastet.com/等下载它们 .

  • 400

    命令

    :%s/<Ctrl-V><Ctrl-M>/\r/g
    

    其中 <Ctrl-V><Ctrl-M> 表示键入Ctrl V,然后按Ctrl M.

    解释

    :%s
    

    替代,%=所有行

    <Ctrl-V><Ctrl-M>
    

    ^ M个字符(Ctrl-V是写入Ctrl ^字符的Vim方式,Ctrl-M在正则表达式后写入M,产生^ M特殊字符)

    /\r/
    

    新行( \r

    g
    

    并在全球范围内进行(不仅仅是第一次出现在线上) .

  • 2

    这些都不适合我,所以我尝试了这个,这有效:

    输入 :%s/

    按CTRL-VCTRL-M

    输入 //g

    按Enter键

    所以Vim的总体命令看起来像 :%s/^M//g

    这样做: :%s (查找和替换) /^M/ (该符号) / (没有字符) g (全局) .

  • 8

    “此函数保留跳转列表

    fun! Dos2unixFunction()
    let _s=@/
    let l = line(".")
    let c = col(".")
    try
        set ff=unix
        w!
        "%s/\%x0d$//e
    catch /E32:/
        echo "Sorry, the file is not saved."
    endtry
    let @/=_s
    call cursor(l, c)
    endfun
    com! Dos2Unix keepjumps call Dos2unixFunction()
    
  • 12

    vim 中,查看文件格式 - DOS或Unix:

    :set filetype = unix

    :set fileformat=unix

    该文件将被回写而没有回车符(CR,^ M)字符 .

  • 4

    那怎么样: :%s/\r//g 这完全适合我 .

    这样做只是为了清理所有行的行尾,它删除了^ M,就是这样 .

  • 1

    ^ M由Ctrl V和M检索,也是如此

    s/^M//g
    

相关问题