[英]Vim execute :e ++ff=dos from vimrc
有时我必须在 Vim 中处理混合的 Unix/DOS 文件。 该文件将在大多数行的末尾显示^M
。 我无法将整个文件转换为 Unix 格式。
解决方法是:e ++ff=dos
我曾尝试将其合并到我的 vimrc 中,至少作为一种快捷方式(如果不是 autocmd),但没有成功。
^M
的ga
将显示:
<^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,
:%s/<CV><cr>//ge<cr>
。 您可以将其合并到函数或自动命令中。: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.