내 데비안 컴퓨터에 패키지가 있습니다 vim-athena
(동일한 관찰).vim-gtk
- 실행하면
vim
터미널에 Vim이 생성됩니다. - 실행하면
gvim
Athena GUI에서 Vim을 사용하여 새 창이 생성됩니다.
그런데 vim
합계 는 무엇입니까 gvim
? 심볼릭 링크는 다음을 가리킨다.동일한표적.
$ readlink -e "$(type -p gvim)"
/usr/bin/vim.athena
$ readlink -e "$(type -p vim)"
/usr/bin/vim.athena
최종 목표는 바이너리 파일입니다.
$ file --brief /usr/bin/vim.athena
ELF 64-bit LSB shared object, ...
둘 다 동일한 바이너리로 해석되면 어떻게 서로 vim
다른 작업을 수행 할 수 있습니까?gvim
배경:
기본 편집기를 변경하는 중입니다 update-alternatives --config editor
. 목록에는 vim.tiny
및 가 있지만 vim.athena
후자를 선택하더라도 Vim은 항상 별도의 GUI가 아닌 터미널에서 열립니다.
답변1
프로그램은 0번째 인수( 또는 argv[0]
이 경우 ) 를 확인하여 다른 경로를 취할 수 있습니다.vim
gvim
Vim은 이 작업을 수행합니다.main.c
:
params.argv = argv;
...
/* Figure out the way to work from the command name argv[0].
"vimdiff" starts diff mode, "rvim" sets "restricted", etc. */
parse_command_name(¶ms);
...
/* Check for: [r][e][g][vi|vim|view][diff][ex[im]] (sort of) */
static void parse_command_name(mparm_T *parmp) {
char_u *initstr;
initstr = gettail((char_u *)parmp->argv[0]);
...
/* "gvim" starts the GUI. Also accept "Gvim" for MS-Windows. */
if (TOLOWER_ASC(initstr[0]) == 'g') {
main_start_gui();
이 코드 조각에서 프로그램은 기본 이름의 첫 번째 문자가
argv[0]
"g"인지 확인하고, 그렇다면 GUI를 시작합니다.
이는 링크를 생성하여 관찰할 수 있습니다.
ln -s /usr/bin/vim.athena vimX
ln -s /usr/bin/vim.athena gvimX
ln -s /usr/bin/vim.athena evimX
ln -s /usr/bin/vim.athena rvimX
ln -s /usr/bin/vim.athena exX
어디에 X
무엇이든, ./vimX
터미널, GUI에서 ./gvimX
Vim을 실행 하고 ./evimX
단순 모드에서 Vim을 실행하는 등의 작업을 수행합니다.