소개 - minsuk-jang/teamproject GitHub Wiki
Vim 은 지속적으로 성장하는 큰 커뮤니티가 있는 강력한 텍스트 편집기 입니다. 편집가가 약 20년 정도 되었지만, 사람들은 여전히 Vimscript 또는 지원되는 스크립팅 언어 중 하나를 사용하여 확장하고 개선하기를 원합니다.
동기
20년이 넘은 시간 동안, Vim은 300K 줄의 방대한 C89 코드를 축적 해 왔습니다. 또다른 문제는 Vim의 큰 코드베이스인, Bram Moolenar를 유지 관리 할 사람은 패치를 받기 전에 신중해야됩니다. 왜냐하면 일단 병합되면 새로운 코드가 해당 사람의 책임이 되기 때문입니다. 이러한 문제로 인해 새로운 기능과 버그 수정이 코어에 통합되는게 매우 힘듭니다. 따라서 Vim은 플러그인 환경의 발전 속도에 따라 갈 수 없습니다.
해결방법
Neovim은 다음 목표를 달성하기 위해 Vim 소스 코드를 적극적으로 리펙토링 하려고 하는 프로젝트 입니다
*리펙토링 = 기능은 그대로 둔 채 프로그램의 가독성, 관리 편의성, 성능을 올리기 위해 수행하는 일련의 프로그램 수정 작업.
- 유지 보수를 단순화하여 버그 수정 및 기능 병합 속도 개선
- 여러 개발자들 간의 작업 분할
- 핵심 소스를 수정하지 않고 새로운 /최신 사용자 인터 페이스를 구현
- 협동 프로세서를 기반으로 하느 새로운 플러그인 아키텍처를 사용하여 확장성 향상
- 플러그인들은 편집기의 명시적 지원없이 모든 프로그래밍 언어 작성 가능이러한 목표를 달성하면 새로운 개발자들이 커뮤니티에 가입 할 것이고, 사용자들을 위한 편집기를 지속적으로 향상시킬 수 있습니다.
Vim을 처음부터 다시 작성하거나 IDE로 변환하는 프로젝트가 아니라는 점을 강조하는 것이 중요합니다.(제공된 새 기능을 사용하면 IDE와 유사한 편집기 배포가 가능합니다). 변경된 사항은 일반적으로 Vimscript 또는 Vim의 편집 모델에 거의 영향을 미치지 않아야합니다. 대부분 Vimscript 플러그인들은 계속 정상적으로 작동되어야합니다. 다음 항목에는 첫 번째 반복에서 수행 할 주요 변경 사항 및 동기에 대한 간략한 설명이 포함되어있습니다.
CMake를 기반으로하는 빌드 Migrate
소스 트리는 다양한 설정으로 다양한 플랫폼에서 Vim을 빌드하기 위해 수십개의 파일을 가지고 있으며, 많은 파일들이 오래되고 쓰여지지 않았다. 대부분의 사용자는 개별 기능을 선택하는것에 대해 신경쓰지않고 충분히 작은 실행 파일을 생성하는 --with-features=huge
를 사용하여 컴파일 합니다.
모든 파일은 제거되고 Vim은 가장 관련성이 높은 플랫폼 용 빌드 스크립트를 생성하는 최신 빌드 시스템인 CMake를 사용하여 빌드합니다.
레거시 지원 및 컴파일 타임 기능
Vim은 레거시 시스템 및 컴파일러를 지원하기 위해 많은 양의 코드를 가지고 있습니다. 모든 코드는 유지 보수 부담을 증가시키고 제거 될 것입니다. 대부분 선택적 기능들은 더 이상 선택사항이 아니다(위 참조), 영구적으로 제거되는 일부 기능 (예 : NetBeans 및 Sun WorkShop 통합)을 제외하고는 없습니다. Vi에뮬레이션도 제거됩니다.
플랫폼 관련 코드
대부분의 플랫폼 특정 코드는 제거되고 libuv는 시스템 차이를 처리하는데 사용됩니다. libuv는 일반적인 시스템 작업을 수행하는 기능이 있는 최신 멀티 플랫폼 라이브러리이며 대부분의 Unix와 Windows를 지원하므로 Vim 커뮤니티의 대다수가 지원됩니다.
새로운 플러그인 아키텍쳐
임베디드 스크립팅 언어 인터프리터를 지원하는 모든 코드느 모든 프로그래밍 언어로 작성된 확장을 지원하는 새로운 플러그인 시스템으로 대체 될것 입니다. 호환성 레이어는 Python이나 Ruby와 같이 현재 지원되는 스크립팅 언어로 작성된 레거시 Vim 플러그인에 제공됩니다. 대부분의 플러그인은 거의 수정되지 않고, 있는 경우 Neovim에서 작동됩니다. 또한, GUI는 플러그인으로 구현되며 Neovim 코어에서 분리됩니다.
Plugin Architecture 페이지에서 세부적인 개요를 확인 할 수 있습니다.