偶尔我必须使用Vim中的混合Unix / DOS文件。该文件将在大多数行的末尾显示^M
。我无法将整个文件转换为Unix格式。
修正为:e ++ff=dos
我试图在我的vimrc中加入至少作为shorcut(如果不是autocmd),但没有成功。
ga
的{p> ^M
将显示:
<^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
个字符?
感谢您的帮助。
答案 0 :(得分:0)
在DOS文件格式中打开缓冲区不会将文件转换为UNIX格式。只要您希望将缓冲区编辑为DOS,并将其写为DOS,它就足够了。隐藏^ M也没有转换 - 你的问题给了我你认为它的印象。
如果您想转换为仅限LF-line-endings,
:%s/<C-V><cr>//ge<cr>
。您可以将其合并到函数或自动命令中。:setlocal ff=unix
答案 1 :(得分:0)
如果执行:e +ff=dos
,则将文件转换为DOS格式;即写完后,所有行结尾将转换为CR-LF。你已经提到你不能将整个文件转换为Unix格式,但如果转换为DOS是可以的,那么这就是解决方案。
对于您的函数,您不需要通过:normal
,因为:e
命令是Ex命令,并且可以直接在函数中使用。对于:normal
这样的普通模式命令,您只需要dd
。因此,您可以重写:
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