Linux上的Vim保存CRLF结尾为

时间:2015-08-04 04:18:26

标签: linux unix vim archlinux

我现在已经使用vim了一段时间,这是我第一次遇到这个问题。

当我打开vim时,它抱怨我的vimrc文件中有CRLF结尾(错误:不是编辑器命令^ M)但是当我使用vim打开文件时,我不会在任何地方看到^ M. fileformat设为unixffsunix,dos

这是一个截图(抱歉,我刚刚创建了自己的帐户,因此无法发布截图): http://i.stack.imgur.com/3PjM8.png

enter image description here

当我在我的vimrc上使用unix2dos并打开vim时,我仍然有CRLF错误,但这次错误明显减少,我仍然没有在行尾看到^ M. fileformat设为dosffsunix,dos

这是一个截图(抱歉,我刚刚创建了自己的帐户,因此无法发布截图): http://i.stack.imgur.com/c74RE.png

enter image description here

我尝试过使用dos2unix和unix2dos,使用vim设置ffffs,使用gedit和Sublime Text 3,甚至从GitHub获取旧的vimrc文件。我也试过降级vim并在完全从我的系统中删除它后重新安装它。我在Arch Linux(i686 gvim包)上使用Vim 7.4.778。

目前我在.vimrc中的所有内容都是:

"NeoBundle Scripts-----------------------------
if has('vim_starting')
  if &compatible
    set nocompatible               " Be iMproved
  endif

  " Required:
  set runtimepath+=~/.vim/bundle/neobundle.vim/
endif

" Required:
call neobundle#begin(expand('~/.vim/bundle'))

" Let NeoBundle manage NeoBundle
" Required:
NeoBundleFetch 'Shougo/neobundle.vim'

" Add or remove your Bundles here:
NeoBundle 'Shougo/neosnippet.vim'
NeoBundle 'Shougo/neosnippet-snippets'
NeoBundle 'tpope/vim-fugitive'
NeoBundle 'ctrlpvim/ctrlp.vim'
NeoBundle 'flazz/vim-colorschemes'

" You can specify revision/branch/tag.
NeoBundle 'Shougo/vimshell', { 'rev' : '3787e5' }

" Required:
call neobundle#end()

" Required:
filetype plugin indent on

" If there are uninstalled bundles found on startup,
" this will conveniently prompt you to install them.
NeoBundleCheck
"End NeoBundle Scripts-------------------------

以下是od -c .vimrc给我的信息:

0000000   "   N   e   o   B   u   n   d   l   e       S   c   r   i   p
0000020   t   s   -   -   -   -   -   -   -   -   -   -   -   -   -   -
0000040   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -  \n
0000060   i   f       h   a   s   (   '   v   i   m   _   s   t   a   r
0000100   t   i   n   g   '   )  \n           i   f       &   c   o   m
0000120   p   a   t   i   b   l   e  \n                   s   e   t    
0000140   n   o   c   o   m   p   a   t   i   b   l   e                
0000160                                               "       B   e    
0000200   i   M   p   r   o   v   e   d  \n           e   n   d   i   f
0000220  \n  \n           "       R   e   q   u   i   r   e   d   :  \n
0000240           s   e   t       r   u   n   t   i   m   e   p   a   t
0000260   h   +   =   /   h   o   m   e   /   a   d   m   n   u   n   p
0000300   w   n   d   /   .   v   i   m   /   b   u   n   d   l   e   /
0000320   n   e   o   b   u   n   d   l   e   .   v   i   m   /  \n   e
0000340   n   d   i   f  \n  \n   "       R   e   q   u   i   r   e   d
0000360   :  \n   c   a   l   l       n   e   o   b   u   n   d   l   e
0000400   #   b   e   g   i   n   (   e   x   p   a   n   d   (   '   /
0000420   h   o   m   e   /   a   d   m   n   u   n   p   w   n   d   /
0000440   .   v   i   m   /   b   u   n   d   l   e   '   )   )  \n  \n
0000460   "       L   e   t       N   e   o   B   u   n   d   l   e    
0000500   m   a   n   a   g   e       N   e   o   B   u   n   d   l   e
0000520  \n   "       R   e   q   u   i   r   e   d   :  \n   N   e   o
0000540   B   u   n   d   l   e   F   e   t   c   h       '   S   h   o
0000560   u   g   o   /   n   e   o   b   u   n   d   l   e   .   v   i
0000600   m   '  \n  \n   "       A   d   d       o   r       r   e   m
0000620   o   v   e       y   o   u   r       B   u   n   d   l   e   s
0000640       h   e   r   e   :  \n   N   e   o   B   u   n   d   l   e
0000660       '   S   h   o   u   g   o   /   n   e   o   s   n   i   p
0000700   p   e   t   .   v   i   m   '  \n   N   e   o   B   u   n   d
0000720   l   e       '   S   h   o   u   g   o   /   n   e   o   s   n
0000740   i   p   p   e   t   -   s   n   i   p   p   e   t   s   '  \n
0000760   N   e   o   B   u   n   d   l   e       '   t   p   o   p   e
0001000   /   v   i   m   -   f   u   g   i   t   i   v   e   '  \n   N
0001020   e   o   B   u   n   d   l   e       '   c   t   r   l   p   v
0001040   i   m   /   c   t   r   l   p   .   v   i   m   '  \n   N   e
0001060   o   B   u   n   d   l   e       '   f   l   a   z   z   /   v
0001100   i   m   -   c   o   l   o   r   s   c   h   e   m   e   s   '
0001120  \n  \n   "       Y   o   u       c   a   n       s   p   e   c
0001140   i   f   y       r   e   v   i   s   i   o   n   /   b   r   a
0001160   n   c   h   /   t   a   g   .  \n   N   e   o   B   u   n   d
0001200   l   e       '   S   h   o   u   g   o   /   v   i   m   s   h
0001220   e   l   l   '   ,       {       '   r   e   v   '       :    
0001240   '   3   7   8   7   e   5   '       }  \n  \n   "       R   e
0001260   q   u   i   r   e   d   :  \n   c   a   l   l       n   e   o
0001300   b   u   n   d   l   e   #   e   n   d   (   )  \n  \n   "    
0001320   R   e   q   u   i   r   e   d   :  \n   f   i   l   e   t   y
0001340   p   e       p   l   u   g   i   n       i   n   d   e   n   t
0001360       o   n  \n  \n   "       I   f       t   h   e   r   e    
0001400   a   r   e       u   n   i   n   s   t   a   l   l   e   d    
0001420   b   u   n   d   l   e   s       f   o   u   n   d       o   n
0001440       s   t   a   r   t   u   p   ,  \n   "       t   h   i   s
0001460       w   i   l   l       c   o   n   v   e   n   i   e   n   t
0001500   l   y       p   r   o   m   p   t       y   o   u       t   o
0001520       i   n   s   t   a   l   l       t   h   e   m   .  \n   N
0001540   e   o   B   u   n   d   l   e   C   h   e   c   k  \n   "   E
0001560   n   d       N   e   o   B   u   n   d   l   e       S   c   r
0001600   i   p   t   s   -   -   -   -   -   -   -   -   -   -   -   -
0001620   -   -   -   -   -   -   -   -   -   -   -   -   -  \n  \n
0001637

以下是hexdump -C .vimrc给我的信息:

00000000  22 4e 65 6f 42 75 6e 64  6c 65 20 53 63 72 69 70  |"NeoBundle Scrip|
00000010  74 73 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |ts--------------|
00000020  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 0a  |---------------.|
00000030  69 66 20 68 61 73 28 27  76 69 6d 5f 73 74 61 72  |if has('vim_star|
00000040  74 69 6e 67 27 29 0a 20  20 69 66 20 26 63 6f 6d  |ting').  if &com|
00000050  70 61 74 69 62 6c 65 0a  20 20 20 20 73 65 74 20  |patible.    set |
00000060  6e 6f 63 6f 6d 70 61 74  69 62 6c 65 20 20 20 20  |nocompatible    |
00000070  20 20 20 20 20 20 20 20  20 20 20 22 20 42 65 20  |           " Be |
00000080  69 4d 70 72 6f 76 65 64  0a 20 20 65 6e 64 69 66  |iMproved.  endif|
00000090  0a 0a 20 20 22 20 52 65  71 75 69 72 65 64 3a 0a  |..  " Required:.|
000000a0  20 20 73 65 74 20 72 75  6e 74 69 6d 65 70 61 74  |  set runtimepat|
000000b0  68 2b 3d 2f 68 6f 6d 65  2f 61 64 6d 6e 75 6e 70  |h+=~|
000000c0  77 6e 64 2f 2e 76 69 6d  2f 62 75 6e 64 6c 65 2f  |wnd/.vim/bundle/|
000000d0  6e 65 6f 62 75 6e 64 6c  65 2e 76 69 6d 2f 0a 65  |neobundle.vim/.e|
000000e0  6e 64 69 66 0a 0a 22 20  52 65 71 75 69 72 65 64  |ndif.." Required|
000000f0  3a 0a 63 61 6c 6c 20 6e  65 6f 62 75 6e 64 6c 65  |:.call neobundle|
00000100  23 62 65 67 69 6e 28 65  78 70 61 6e 64 28 27 2f  |#begin(expand('/|
00000110  68 6f 6d 65 2f 61 64 6d  6e 75 6e 70 77 6e 64 2f  |~/|
00000120  2e 76 69 6d 2f 62 75 6e  64 6c 65 27 29 29 0a 0a  |.vim/bundle'))..|
00000130  22 20 4c 65 74 20 4e 65  6f 42 75 6e 64 6c 65 20  |" Let NeoBundle |
00000140  6d 61 6e 61 67 65 20 4e  65 6f 42 75 6e 64 6c 65  |manage NeoBundle|
00000150  0a 22 20 52 65 71 75 69  72 65 64 3a 0a 4e 65 6f  |." Required:.Neo|
00000160  42 75 6e 64 6c 65 46 65  74 63 68 20 27 53 68 6f  |BundleFetch 'Sho|
00000170  75 67 6f 2f 6e 65 6f 62  75 6e 64 6c 65 2e 76 69  |ugo/neobundle.vi|
00000180  6d 27 0a 0a 22 20 41 64  64 20 6f 72 20 72 65 6d  |m'.." Add or rem|
00000190  6f 76 65 20 79 6f 75 72  20 42 75 6e 64 6c 65 73  |ove your Bundles|
000001a0  20 68 65 72 65 3a 0a 4e  65 6f 42 75 6e 64 6c 65  | here:.NeoBundle|
000001b0  20 27 53 68 6f 75 67 6f  2f 6e 65 6f 73 6e 69 70  | 'Shougo/neosnip|
000001c0  70 65 74 2e 76 69 6d 27  0a 4e 65 6f 42 75 6e 64  |pet.vim'.NeoBund|
000001d0  6c 65 20 27 53 68 6f 75  67 6f 2f 6e 65 6f 73 6e  |le 'Shougo/neosn|
000001e0  69 70 70 65 74 2d 73 6e  69 70 70 65 74 73 27 0a  |ippet-snippets'.|
000001f0  4e 65 6f 42 75 6e 64 6c  65 20 27 74 70 6f 70 65  |NeoBundle 'tpope|
00000200  2f 76 69 6d 2d 66 75 67  69 74 69 76 65 27 0a 4e  |/vim-fugitive'.N|
00000210  65 6f 42 75 6e 64 6c 65  20 27 63 74 72 6c 70 76  |eoBundle 'ctrlpv|
00000220  69 6d 2f 63 74 72 6c 70  2e 76 69 6d 27 0a 4e 65  |im/ctrlp.vim'.Ne|
00000230  6f 42 75 6e 64 6c 65 20  27 66 6c 61 7a 7a 2f 76  |oBundle 'flazz/v|
00000240  69 6d 2d 63 6f 6c 6f 72  73 63 68 65 6d 65 73 27  |im-colorschemes'|
00000250  0a 0a 22 20 59 6f 75 20  63 61 6e 20 73 70 65 63  |.." You can spec|
00000260  69 66 79 20 72 65 76 69  73 69 6f 6e 2f 62 72 61  |ify revision/bra|
00000270  6e 63 68 2f 74 61 67 2e  0a 4e 65 6f 42 75 6e 64  |nch/tag..NeoBund|
00000280  6c 65 20 27 53 68 6f 75  67 6f 2f 76 69 6d 73 68  |le 'Shougo/vimsh|
00000290  65 6c 6c 27 2c 20 7b 20  27 72 65 76 27 20 3a 20  |ell', { 'rev' : |
000002a0  27 33 37 38 37 65 35 27  20 7d 0a 0a 22 20 52 65  |'3787e5' }.." Re|
000002b0  71 75 69 72 65 64 3a 0a  63 61 6c 6c 20 6e 65 6f  |quired:.call neo|
000002c0  62 75 6e 64 6c 65 23 65  6e 64 28 29 0a 0a 22 20  |bundle#end().." |
000002d0  52 65 71 75 69 72 65 64  3a 0a 66 69 6c 65 74 79  |Required:.filety|
000002e0  70 65 20 70 6c 75 67 69  6e 20 69 6e 64 65 6e 74  |pe plugin indent|
000002f0  20 6f 6e 0a 0a 22 20 49  66 20 74 68 65 72 65 20  | on.." If there |
00000300  61 72 65 20 75 6e 69 6e  73 74 61 6c 6c 65 64 20  |are uninstalled |
00000310  62 75 6e 64 6c 65 73 20  66 6f 75 6e 64 20 6f 6e  |bundles found on|
00000320  20 73 74 61 72 74 75 70  2c 0a 22 20 74 68 69 73  | startup,." this|
00000330  20 77 69 6c 6c 20 63 6f  6e 76 65 6e 69 65 6e 74  | will convenient|
00000340  6c 79 20 70 72 6f 6d 70  74 20 79 6f 75 20 74 6f  |ly prompt you to|
00000350  20 69 6e 73 74 61 6c 6c  20 74 68 65 6d 2e 0a 4e  | install them..N|
00000360  65 6f 42 75 6e 64 6c 65  43 68 65 63 6b 0a 22 45  |eoBundleCheck."E|
00000370  6e 64 20 4e 65 6f 42 75  6e 64 6c 65 20 53 63 72  |nd NeoBundle Scr|
00000380  69 70 74 73 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |ipts------------|
00000390  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 0a 0a     |-------------..|
0000039f

1 个答案:

答案 0 :(得分:1)

将大量评论转移到答案中。

很好奇。你已经涵盖了许多基础,但显然仍有问题 - 如果没有,Vim不会抱怨。您是否查看了od -c .vimrc的输出 - 输出中是否出现\r?您是否检查过(例如,通过在顶部设置故意的语法错误),Vim正在查看您期望的文件 - 它是否可以查看与您正在检查的文件不同的文件?

  • 我发现错误消息中的行号大多与.vimrc文件中的行号不匹配,这表明Vim正在查看与您正在查看的文件不同的文件。< / LI>
  

我使用od -c .vimrc&amp;的输出更新了我的问题。 hexdump -C .vimrc

od -c输出不包含任何回车符。但是,它也不是第一组错误消息的文件。例如,您的错误消息列表第31行

E15: Invalid expression: exists('g:loaded_neobundle') &&

但您显示的.vimrc中的第31行是

" Required:

因此,您无法通过修改.vimrc来解决问题的原因是该文件不是导致问题的原因。您需要以某种方式找出正在读取的文件(根据错误消息有一个有374行或更多行),并修复这些文件。换句话说,你看错了地方。

如果你想不出更好的方法,那就试试吧:

strace -o /tmp/vim.strace vim ~/.vimrc

退出vim。然后在open中查找/tmp/vim.strace次来电。它成功打开的一个或多个文件可能是引起悲伤的文件。当我这样做时,通过一些小心的grep调整,我得到了/etc/vimrc等文件以及/usr/share/vim/vim70/下的众多文件,以及~/.viminfo~/.vimrc

  

您能否发布您使用的grep调整内容?我在Sublime Text中打开了/tmp/vim.strace,并为“打开”获得了305场比赛。另一件事是我知道错误消息显示“第374行”,但我检查了,我只能在.vimrc

中看到38行

我用过:

grep open /tmp/vim.strace | grep -v '= -1 ENO' | grep -v '"."' |
    grep -o '".*"' | sort -u

它不优雅,但它有效。第一个grep删除了失败(ENOTDIRENOENT);第二个删除打开当前目录(令人惊讶的大量);第三个只选择双引号之间的字符串; sort为您提供每个名称的一份副本。不要费心查看.viminfo文件;它们是二进制数据,既不相关也不可读。同样,您可以忽略共享库和terminfo和区域设置文件等 -

您还可以在/usr/share/vim下查找最近更改过的文件。例如:

find /usr/share/vim -type f -mtime -30

在过去30天左右更改的文件。如果你找到它们,你可能想要担心它们被改变的原因。

  

我收到了一堆grep的文件。我怎样才能找出导致问题的原因?我做了find /usr/share/vim -type f -mtime -7因为这个错误在上周末开始发生,这给了我/usr/share/vim/vimfiles/syntax/HGAnnotate.vim。这个文件有问题吗?

如果该文件位于grepfind的列表中,则可能。如果没有,请查看与NeoBundle相关的任何内容。否则,请尝试对文件执行file命令,并查看是否有任何文件标记为具有CRLF,DOS或类似的行结尾。如果没有显示任何内容,请在其上尝试od -c并在输出中查找反斜杠-r(\r)。

  

我发现问题出在NeoBundle文件上,并用旧的GitHub备份替换。现在一切都有效。

     

不幸的是,在从我的旧版.vimrc通过NeoBundle安装了所有插件后,我仍然遇到^ M错误。但是这次我可以从vim访问NeoBundle插件。

在这个阶段,您需要重复或继续练习,找到具有DOS风格的CRLF行结尾的文件,如我已经描述的那样。如果vim完全运行,您可以使用您已经了解的技术修复文件,这也在How to convert the ^M linebreak to normal linebreak in a file that is opened in vim?中进行了描述。

最后,user5187937报告:

  

这为我修复了一切:git config --global core.autocrlf input显然git正在将我的所有插件转换为CRLF格式,即使我从未更改过core.autocrlf设置。