현재 한 컴퓨터에서 Ubuntu와 Windows를 같이 사용중이다.
지금까지 3번정도 Ubuntu 사용을 해보려고 시도했었지만 적은 사용량과 한글 문서등의 호환성 이슈 때문에 사용을 포기했었으나 지금은 그래도 꾸준히 사용을 하고 있다.
이전 글에도 올렸지만 주력 text editor로 vim을 사용한지가 꽤 되었는데 아직도 Ubuntu에서는 최신 vimrc 파일을 설치해두지 않았더라.
그래서 그대로 _vimrc 파일을 긁어다가 Ubuntu에 .vimrc로 넣어주었는데 이게 무슨 일! vim을 로딩할때 넘쳐나는 에러의 향연을 볼 수 있다.
한 두개야 vim 버전 문제겠지하고 넘겼을 수 있었겠지만 수십개가 주르륵 나오는 것으로 바로 알아차렸다.
아, 이거 100% 인코딩이나 Line ending 문제다.
아니나다를까 Unix-based 시스템과 DOS-based 시스템의 Line ending이 다르단다.
분명 어딘가에서 읽었을 것 같은데 당시에는 Unix-based 시스템을 쓸 일이 없다고 생각했고 앵간한 상용 프로그램들은 이런 문제를 알아서 해결해주기에 'Line ending이란게 있다더라~' 하고 넘어간듯 하다.
다행히 구글에서 비슷한 케이스를 바로 찾을 수 있었는데 별로 반가운 대접을 받지는 못하는 것 같다.
(그도 그럴게 issue에 bug report 처럼 올렸으니... )
github.com/vim/vim/issues/6156
Solution
vim wiki에 가보니 친절한 설명이 되어있다.
vim.fandom.com/wiki/File_format
결국 모든 문제의 근원은 엔터를 칠 때 CR(Carriage Return)과 LF(Line Feed)(New Line이라고 하기도 함)를 자동으로 입력해주는 DOS에서 가져온 텍스트 파일을 LF만 사용해서 새 줄을 표기하는 Unix 시스템이 읽고 "CR이 뭐임?" 하는 상황 때문에 문제가 발생하는 것이다.
참고로 CR은 0x0D 이며 이는 Ctrl-M과 대응된다.
CR과 LF의 유래에 대해서는 아래 글에 자세히 나와있다.
일반적인 text 파일의 경우 해결 방법은 크게 1)CR을 지워주거나 2)CR을 무시하게 하거나 둘 중 하나이지만, vim 시작후 가장 먼저 읽어들이기 시작하는 vimrc 파일의 경우는 1)CR을 지운 버전을 사용하는 방법밖에 없는 것 같다.
(CR을 무시하게 하는 방법이 있다면 꼭 알려주세요)
1. dos2unix 유틸리티 설치 후 CR을 지워주기.
sudo apt-get install dos2unix
dos2unix ~/.vimrc
2. vim의 substitute 기능을 사용해 CR을 지워주기.
^M 을 vim 커멘드에 입력하기 위해서는 Ctrl-v를 누른후 Ctrl-m을 눌러야 한다.
:%s/^M//g
'취미 > Programming' 카테고리의 다른 글
Matlab과 Python에서의 image 좌표축 한번에 정리! (0) | 2021.06.16 |
---|---|
Ubuntu setup (Linux setup) (0) | 2021.06.11 |
Python(anaconda) Vim intagration (2) | 2020.10.28 |
Multi Layer Perceptron (MLP) (1) | 2020.05.06 |
[GitHub] 3. GUI Git: GitHub Desktop, Sourcetree, GitKraken (0) | 2019.11.13 |