繁体   English   中英

Vim 执行 :e ++ff=dos 从 vimrc

[英]Vim execute :e ++ff=dos from vimrc

有时我必须在 Vim 中处理混合的 Unix/DOS 文件。 该文件将在大多数行的末尾显示^M 我无法将整个文件转换为 Unix 格式。

解决方法是:e ++ff=dos

我曾尝试将其合并到我的 vimrc 中,至少作为一种快捷方式(如果不是 autocmd),但没有成功。

^Mga将显示:

<^M>  13,  Hex 0d,  Octal 15

这在 vimrc 中不起作用:

function! Fix_dos()
    execute "normal :e ++ff=dos<cr>"
endfunction

我尝试了一些具有隐藏功能的东西,但这不会隐藏所有^M字符。

:set conceallevel=2
:syntax match Todo /\r/ conceal

另外,有没有办法检测文件是否会显示^M字符?

谢谢你的帮助。

以 DOS 文件格式打开缓冲区不会文件转换为 UNIX 格式。 仅当您希望将缓冲区编辑为 DOS 并将其写入为 DOS 时才足够。 隐藏 ^M 也不会转换 - 您的问题给我的印象是您认为的。

如果你想转换为 LF-line-endings-only,

  1. 删除所有 ^M 字符: :%s/<CV><cr>//ge<cr> 您可以将其合并到函数或自动命令中。
  2. 将缓冲区标记为仅使用 LF 行结尾: :setlocal ff=unix

如果执行:e +ff=dos ,则将文件转换为 DOS 格式; 即写入后,所有行尾都将转换为CR-LF。 您提到您无法将整个文件转换为 Unix 格式,但如果转换为 DOS 是可以的,那么这就是解决方案。

对于您的函数,您不需要经过:normal ,因为:e命令是 Ex 命令,可以直接在函数中使用。 对于像dd这样的正常模式命令,您只需要:normal 因此,您可以重写:

function! Fix_dos()
    " This would be the correct syntax, but no need for :normal:
    "execute "normal :e ++ff=dos\<cr>"
    " Also, no need for execute:
    "execute "e ++ff=dos"
    edit ++ff=dos
endfunction

事实上,我会定义:

:command! FixDos edit ++ff=dos

如果您无法隐藏整个文件,则必须使用^M 您能做的最好的事情就是尝试隐藏它们,就像您尝试隐藏一样。 这个变体可能会通过在其他语法组中应用来捕获更多^M实例:

:syntax match Todo /\r/ conceal containedin=ALL

如果您想避免在文件打开之前按下某个键:

“按 ENTER 或键入命令继续”

静默运行命令,如下所示:

com! SetFileFormatDos edit ++ff=dos
:silent SetFileFormatDos

另外,请注意 SetFileFormatDos 中的大写“S”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM