에 대한 나의 첫 번째 기사 unix.stackexchange.com
. 내가 요구하는 내용을 조사하지 않고 뛰어들지 않을 것이므로 이 게시물의 제목에만 근거하여 반응하지 마십시오.
Vi
나는 그 주제에 대해 꽤 많은 연구를 했습니다 Vim
. 여러 포럼뿐만 아니라이것,이것또는이것스레드 이야기,윔슈퍼세트다치수, 유용한 혜택이 많이 추가되었습니다.
혼란 #1
그러나 지금은 (이 운영 체제를 더 잘 배우고 싶어서) 심층적인 Linux 강좌를 듣고 있는데 Linux Foundation 강사가 이렇게 말했습니다.
일반적으로 배포판에 설치된 프로그램은 다음과 같습니다.윔, 그리고치수별칭으로 연결하면 됩니다.
내가 켜도 이건 합리적인 것 같아육또는정력내 터미널에서정확히 똑같다동일한 소프트웨어 이름, 버전, 작성자 등으로 시작 화면이 시작됩니다.
혼란 #2
하지만,어느 vim그리고어느 여섯/usr/bin/
디렉토리에 있는 다른 파일을 인쇄합니다 .
그래서 한편으로는 많은 사람들이 이렇게 말하고 있기 때문에 저는 정말 혼란스럽습니다.윔슈퍼세트다치수, 그런데 반면에 제가 지금 하고 있는 수업에서는 둘 다라고 하더라고요.윔, 및 열기육또는정력, 사실은,거의(동일한 소프트웨어처럼 보이지만 다르게 동작하기 때문에) 가 이를 증명합니다.
혼란 #3
그래서,
사람들은 왜 말을 해?치수그리고윔두 개의 다른 프로그램이에요윔슈퍼세트다치수? 적어도 CentOS 7에서는 동일한 시작 화면과 버전 번호를 갖기 때문입니다.
아니면 어쩌면치수별칭입니다윔특히 현재 사용하고 있는 CentOS 7에서는 일반적으로 (다른 운영 체제에서는) 두 개의 다른 프로그램인가요? 하지만 다시 말하지만, 그들은 두 개의 서로 다른 바이너리입니다.정확히 똑같다정말 혼란스러운 시작 화면입니다.
다르지 않다면 다음을
.java
사용하여 소스 파일을 열 때 강조 표시되는 이유는 무엇입니까?정력그리고 - 아니, 내가 열면육?
이 게시물이 다소 혼란스럽다면 죄송합니다. 하지만 그것이 바로 저를 혼란스럽게 하는 것이며 제가 수집하고 관찰한 모든 정보는 바로 이것이기 때문입니다.
그것들은 동일한 것 같지만(강사가 주장함) 서로 다르다는 말을 듣고(다른 포럼에서) 실제로 동작하고(이 Java 파일의 경우) 표시됩니다(어느) 다른.
그렇다면 이것으로부터 무엇을 이해해야 합니까?
고쳐 쓰다:
요청한 대로 수행 vi --version
하고 vim --version
다음을 출력합니다.
vi --version
:
VIM - Vi IMproved 7.4 (2013 Aug 10, compiled Dec 15 2020 16:43:23)
Included patches: 1-207, 209-629
Modified by <[email protected]>
Compiled by <[email protected]>
Small version without GUI. Features included (+) or not (-):
vim --version
:
VIM - Vi IMproved 7.4 (2013 Aug 10, compiled Dec 15 2020 16:44:08)
Included patches: 1-207, 209-629
Modified by <[email protected]>
Compiled by <[email protected]>
Small version without GUI. Features included (+) or not (-):
답변1
원래 vi는 1976년 Bill Joy에 의해 만들어졌습니다. vi 편집기는 이후 여러 번 다시 구현되었으며 이제 vi라는 이름은 "원본 vi의 명령과 키 바인딩을 대략적으로 구현하는 모든 프로그램"을 의미합니다. vi가 "aspirin"이나 "escalator"라는 단어와 같은 상표를 잃었다고 말할 수 있습니다.
Vim은 원래 vi보다 더 많은 기능을 구현하지만 여전히 광범위하게 "vi"와 호환되기 때문에 vi의 상위 집합으로 간주됩니다.
vi
컴퓨터에 명령과 명령이 모두 존재하는 이유는 vim
프로그램의 일부 사용이 "vi"와 똑같이 동작하기 때문입니다. 프로그램이 vi
더 작기 때문에 더 빨리 시작됩니다. Vim은 일부 편집 명령을 약간 다르게 수행할 수 있는데, 이는 잘못된 것으로 간주될 수 있습니다. 이는 vi 명령을 스크립팅할 때 특히 중요하며, 다른 프로그램이나 스크립트에서 이를 사용하는 경우 출력이 "올바른" 것이 필요합니다.
두 개의 프로그램을 하나로 결합한 Bash 셸에도 동일한 디자인이 적용됩니다. as 가 호출될 때 sh
Bash는 원래 버전을 에뮬레이트합니다 /bin/sh
. 즉, 기능을 제한하고 as 가 호출될 때와 일부 측면에서 약간 다르게 동작합니다 bash
.
동일한 시작 화면과 일치하는 버전 번호가 표시되는 이유는 두 프로그램이 동일한 소스에서 왔으며 함께 개발되었기 때문입니다. 동일한 소스 코드를 공유할 수도 있습니다.
답변2
Vim은 Bill Joy의 원래 vi에서 나왔습니다. 그러나 오늘날 vim 개발은 vi보다 훨씬 더 강력하기 때문에 많은 배포판(CentOS 포함)에서는 덜 강력한 vim을 사용하여 원래 vi 동작을 에뮬레이션합니다.
질문/혼란에 답변하려면:
vi를 열면 vim(자신을 vim이라고 설명함)과 동일한 시작 화면이 열립니다. 왜냐하면 vim은 실제로 원래 vi가 아니라 실행 중인 vim의 간단한 버전이기 때문입니다.
/usr/bin/vi
/usr/bin/vim
둘 다 실제로 vim 소스 코드에서 컴파일되었지만 기능(옵션)이 다르기 때문에 서로 다른 바이너리입니다 .사용시 구문 강조 기능을 사용할 수 없지만
vi file.java
,vim file.java
다른 옵션으로 컴파일했기 때문입니다./usr/bin/vim --version
및 의 출력을 주의 깊게 살펴보면/usr/bin/vi --version
전자는+syntax
.와 같은 함수를 표시하고 후자는-syntax
.
이것이 왜 혼란스러울 수 있는지 이해하고 도움이 되기를 바랍니다.
답변3
vi --version
합계 출력 에서 vim --version
:
vi --version:
VIM - Vi IMproved 7.4 (2013 Aug 10, compiled Dec 15 2020 16:43:23)
Included patches: 1-207, 209-629
Modified by <[email protected]>
Compiled by <[email protected]>
Small version without GUI. Features included (+) or not (-):
vim --version:
VIM - Vi IMproved 7.4 (2013 Aug 10, compiled Dec 15 2020 16:44:08)
Included patches: 1-207, 209-629
Modified by <[email protected]>
Compiled by <[email protected]>
Small version without GUI. Features included (+) or not (-):
...저는 다음과 같은 결론을 내렸습니다.
2020년 12월 15일 16시 43분 23초에 RedHat의 패키지 빌더는 사용 중인 시간대에 관계없이 vim 7.4
소스 코드의 압축을 풀고 여러 패치를 적용한 다음 일련의 컴파일 시간 구성 설정을 사용하여 바이너리 빌드를 시작했습니다. vi
사용자 친화적인 기능을 비활성화하더라도 가능한 한 컴팩트하고 클래식과 최대한 호환되도록 설계되었습니다 . 결과 바이너리의 이름은 /usr/bin/vi
RPM 패키지로 패키지됩니다 vim-minimal
.
참고: 결과 바이너리의 이름은 이지만 vi
의심할 여지 없이 여전히 Vim입니다. vi
기본적으로 호환 모드에 있습니다.
그런 다음 16시 44분 8초에 동일한 소스 코드와 패치를 사용하지만 다른 컴파일 시간 구성 설정을 사용하여 또 다른 패키지 빌드 작업이 시작됩니다. 이 작업은 더 많은 디스크 공간을 소비하고 vi
어떤 면에서 기존 구성과 약간 다를 수 있지만 보다 현대적이고 기능이 풍부한 구성을 구축하도록 구성됩니다. 이 컴파일을 통해 생성된 바이너리는 이름 /usr/bin/vim
이 지정 되고 vim-enhanced
.
(이 버전에서 알 수 있듯이 Small version without GUI
패키지 버전이 아닙니다 vim-X11
. 세 번째 빌드 실행과 또 다른 RPM 패키지가 됩니다.)
원본 버전은 vi
1970년대 Bill Joy에 의해 작성되었으며 1978년 BSD Unix의 일부로 출시되었으며 이후 다양한 상용 Unix에 라이센스가 부여되었습니다. 1983년에 코드 베이스의 소유권은 UNIX System V의 일부로 AT&T로 이전되었습니다. 따라서 2002년 라이센스 규칙이 완화될 때까지 AT&T 소스 코드에 대한 라이센스가 있는 개인과 회사만이 이를 배포할 수 있었습니다 vi
. vi
하지만 라이센스에 필요한 값비싼 버전은 없습니다.
vim
향상된 클론 중 하나입니다. 1991년에 대중에게 출시되었으며 그 이후 광범위한 크로스 플랫폼 개발을 거쳤습니다. 이로 인해 원본보다 더욱 독특해지며 vi
아마도 가장 널리 사용되는 복제본일 것입니다 vi
.
RedHat의 Vim 패키징은 단일 소스 코드 패키지에서 생성된 바이너리 파일을 여러 RPM 바이너리 패키지( , 및 )로 분할 vim-common
합니다 . 그 안에는 다른 패키지가 Vim에 기능을 추가하는 구문이나 파일 형식 정의 또는 기타 파일을 넣을 수 있는 일부 디렉터리가 정의되어 있습니다. 패키지에 따라 다르며 포함되거나 필수 파일을 포함합니다. 온라인 도움말 파일도 사용할 수 있지만 꼭 필요한 것은 아닙니다.vim-filesystem
vim-minimal
vim-enhanced
vim-X11
vim-filesystem
vim-common
vim-filesystem
vim-enhanced
vim-X11
vim-common
vim-minimal
vim-minimal
, [/usr]/bin/vi
바이너리, /usr/bin/ex
구성 파일 및 해당 매뉴얼 페이지를 제공합니다 ./usr/bin/rvi
/usr/bin/[r]view
/etc/virc
vim-enhanced
보다 현대적인 컴파일 시간 구성 기본값을 제공 /usr/bin/vim
하지만 여전히 터미널 기반 UI만 있습니다. 완전한 X11 GUI 및 마우스 지원(라는 바이너리 포함 )을 갖춘 Vim 버전을 제공하려면 명시적으로 Perl 및 vim-common
.vim-X11
/usr/bin/gvim
vim-enhanced
RedHat 설치 프로그램에서 "최소 설치" 를 선택한 경우에도 포함될 수 있지만 vim-minimal
또는는 완전히 선택 사항입니다.vim-enhanced
vim-X11
프로세스에 대해 자세히 알아보려면 .src.rpm
이러한 모든 바이너리 RPM을 빌드하는 해당 패키지를 다운로드하고 이를 빈 디렉터리에 추출한 다음 vim.spec
루트 디렉터리에서 파일을 연구하는 것이 좋습니다. 이 파일에는 각 Vim 버전에 대한 정확한 구성 옵션이 포함되어 있습니다.
전통문화에 관심이 있다면 vi
,ex-vi.sourceforge.net에서 찾을 수 있습니다.. 그러나 대부분의 최신 Linux 배포판(임베디드 플랫폼을 대상으로 하지 않거나 절대 최소 크기로 제한되지 않음)은 아마도 Vim을 레거시 vi
.