Vim в Linux сохраняет файлы с окончанием CRLF
Я уже некоторое время использую vim, и это первый раз, когда я получил эту проблему.
Когда я открываю vim, он жалуется на наличие окончаний CRLF в моем файле vimrc (Ошибка: не команда редактора ^M), но когда я открываю файл с помощью vim, я нигде не вижу ^ M. fileformat
установлен в unix
а также ffs
является unix,dos
,
Вот снимок экрана (извините, я только что создал свой аккаунт, поэтому не могу публиковать снимки экрана):
Когда я использую unix2dos на моем vimrc и открываю vim, у меня все еще есть ошибки CRLF, но на этот раз ошибок значительно меньше, и я до сих пор не вижу ^ M в конце строк. fileformat
установлен в dos
а также ffs
является unix,dos
,
Вот снимок экрана (извините, я только что создал свой аккаунт, поэтому я не могу публиковать снимки экрана):
Я попытался с помощью dos2unix и unix2dos, установив ff
а также ffs
используя vim, используя gedit и Sublime Text 3, и даже получая мой старый файл vimrc из GitHub. Я также попытался снизить vim и переустановить его после полного удаления из моей системы. Я использую Vim 7.4.778 в Arch Linux (пакет i686 gvim).
В настоящее время все, что у меня есть в моем.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 ответ
Передача подробных комментариев в ответ.
Это любопытно. Вы рассмотрели несколько основ, но проблема все еще очевидна - Vim не будет жаловаться, если ее нет. Вы смотрели на выход из od -c .vimrc
- есть ли случаи \r
в выходной? Вы проверили (например, поместив преднамеренную синтаксическую ошибку вверху), что Vim смотрит на ожидаемый файл - может ли он смотреть на файл, отличный от того, который вы проверяете?
- Я заметил, что номера строк в сообщениях об ошибках в основном не совпадают с номерами строк в вашем
.vimrc
файл, который предполагает, что Vim смотрит на файл, отличный от того, на который вы смотрите.
Я обновил свой вопрос с выводами для
od -c .vimrc
&hexdump -C .vimrc
,
od -c
вывод не содержит возврат каретки. Тем не менее, это также не файл для первого набора сообщений об ошибках. Например, строка списка сообщений об ошибках 31
E15: Invalid expression: exists('g:loaded_neobundle') &&
но строка 31 в .vimrc
вы показываете
" 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
твики ты использовал? я открыл/tmp/vim.strace
в Sublime Text и получил 305 совпадений за "открытый". Другое дело, что я знаю, что сообщение об ошибке гласит "строка 374", но я проверил и смог увидеть только 38 строк в моем.vimrc
Я использовал:
grep open /tmp/vim.strace | grep -v '= -1 ENO' | grep -v '"."' |
grep -o '".*"' | sort -u
Это не элегантно, но это сработало. Первый grep
удаляет сбои (ENOTDIR
, ENOENT
); вторая удаляет открытия текущего каталога (на удивление их большое количество); третий выбирает только строку между двойными кавычками; 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
, Этот файл проблемный?
Если этот файл был в списке из grep
а также find
тогда наверное. Если нет, посмотрите на все, что связано с NeoBundle. В противном случае попробуйте file
команда на файлы и посмотреть, если какие-либо помечены как имеющие CRLF, DOS или аналогичные окончания строк. Если ничего не появляется, попробуйте od -c
на них и ищи обратную косую черту-р (\r
) в выходной.
Я обнаружил, что проблема была в файлах NeoBundle, и заменил его моей старой резервной копией GitHub. Все работает сейчас.
К сожалению после установки всех моих плагинов через NeoBundle из моего старого
.vimrc
Я все еще получаю ошибки ^M. Однако на этот раз я могу получить доступ к плагину NeoBundle из vim.
На этом этапе вам нужно повторить или продолжить упражнение, найдя файлы с окончаниями строк в стиле DRL в стиле CRLF, как я уже описывал. Если vim
работает, вы можете исправить файлы, используя методы, которые вы уже знаете, также описанные в разделе Как преобразовать разрыв строки ^M в обычный разрыв строки в файле, который открывается в vim
?,
И, наконец, user5187937 сообщает:
Это исправило все для меня:
git config --global core.autocrlf input
По-видимомуgit
конвертировал все мои плагины в формат CRLF, хотя я никогда не менял своиcore.autocrlf
установка.