$ git commit -a error: There was a problem with the editor '/usr/bin/vi'. Please supply the message using either -m or -F option.
ã¨ãããããªã¨ã©ã¼ã«ãªãã
ã¨ãã£ã¿ã¨ãã¦/usr/bin/viã使ã£ã¦ã³ãã³ãã®æ»ãå¤ã0以å¤ã ã£ãã®ã§ãä¸è¨ã®ã¨ã©ã¼ã«ãªã£ããããã
$ /usr/bin/vi $ echo $? 1
ã¨ãåä½ã§å®è¡ãã¦ãã¨ã©ã¼ã«ãªã£ã¦ããã/usr/bin/vimã ã¨ã¨ã©ã¼ã«ã¯ãªããªã
$ /usr/bin/vim $ echo $? 0
ã®ã§ã/usr/bin/vimãã¨ãã£ã¿ã«ãããã¨ã©ã¼ã¯ã§ãªããªã£ãã
git config --global core.editor /usr/bin/vim
ãããã/usr/bin/viã¯/usr/bin/vimã¸ã®ã·ã³ããªãã¯ãªã³ã¯ãªãã ãã
ã§ãã½ã¼ã¹ãã¿ãã¨argv[0]ãã¿ã¦viã¨ã/usr/bin/viã§èµ·åããã¦ããã¨åä½ãå¤ãã¦ããã£ã½ãã
{ char *base = strrchr(argv[0], '/'); if (base) base++; /* skip over slash */ else base = argv[0]; Unix2003_compat = 0; if (strcmp(base,"vi")==0) { Unix2003_compat = COMPAT_MODE("bin/vi", "Unix2003"); } else if (strcmp(base,"ex")==0) { Unix2003_compat = COMPAT_MODE("bin/ex", "Unix2003"); } }
COMPAT_MODEãã¯ãã¯compat_modeé¢æ°ãå¼ãã§ãããcompat_modeã¯functionã¨modeãå¼æ°ã«ã¨ãã
åºæ¬çã«functionã¯ãã§ãã¯ããã¦ããªãã¦ãmodeã«"Unix2003"ã渡ãããå ´åã¯ãç°å¢å¤æ°COMPAT_MODEãè¨å®ããã¦ãã¦legacyã ã£ããfalseãè¿ããunix2003ã ã£ããtrueãè¿ããè¨å®ããã¦ããªãã£ãããtrueãè¿ãã¨ãããããªãã®ã
vimã®ã³ã¼ãã®Unix2003_compatãæå¹ã«ãªã£ã¦ä»¥ä¸ã®ifæãæå¹ã«ãªã£ããããã¨ã©ã¼ã«ãªã£ã¦ããã£ã½ãã
/* Exit properly */ void getout(exitval) int exitval; { ... /* When running in Ex mode an error causes us to exit with a non-zero exit * code. POSIX requires this, although it's not 100% clear from the * standard. */ if (exmode_active || Unix2003_compat ) exitval += ex_exitval;