magit 按c c提交时COMMIT_EDITMSG中输入中文就乱码有什么办法吗(win7)


#1

magit 按c c提交时 COMMIT_EDITMSG中输入中文就乱码。

而用命令行 git commit -m “中文” 或 git-gui来提交时输入中文都是正常的,就在magit这里有乱码,有什么办法解决吗? 系统win7

还有用c-x v v (vc-next-action)提交中文也是正常显示的


#2

编码问题,永远是windows的痛


#3

可以参考这个,不知道顶不顶用。现在我突然发现 magit commit 时我的文件夹不能有中文,但是文件名可以是中文,有点魔幻。

process-coding-system-alist 是啥可以 describe-variable 看一下。

提醒一下,如果你用了那个配置后 counsel-regrep counsel-git-grep 搜索中文乱码的话,得改成下面这个。

("[cC][mM][dD][pP][rR][oO][xX][yY]" utf-8-dos . gbk-dos)

#4

(prefer-coding-system 'utf-8)
用这句可以解决magit c c提交时中文乱码的问题,但是用了这句以后ripgrep,fd等命令在emacs里面用时本来可以搜索中文的又不能用中文了,find-file-in-project-by-selected 中文文件名也搜索不出来了。

不用中文是不可能的,现在我的办法是可能有中文地方先用 url-encode-url编码,然后在解码


#5

我也是在WIN7下用,一直没解决。我是采用全设为GBK的方法,但git这块一直改不了。查看过magit设置。

(defcustom magit-git-global-arguments
  `("--no-pager" "--literal-pathspecs" "-c" "core.preloadindex=true"
    "-c" "log.showSignature=false"
    ,@(and (eq system-type 'windows-nt)
           (list "-c" "i18n.logOutputEncoding=UTF-8")))

貌似magit在windows下就默认用UTF-8 改成utf-8又不能搜索。目前只能就搜索不就git


#6

你可以开一个issue问magit的开发者,他也许可以帮助你。


#7

在magit issues的 https://github.com/magit/magit/pull/3250 中提到了相关的问题。magit-process.el源码中也注释了:

  (when (eq system-type 'windows-nt)
    ;; On w32, git expects UTF-8 encoded input, ignore any user
    ;; configuration telling us otherwise (see #3250).
    (encode-coding-region (point-min) (point-max 'utf-8-unix)))

但win7下默认的编码是gbk。在magit源码搜索utf-8,有好几个地方都是把utf-8硬编码了。都不知道编码统一成gbk要怎么改:sweat:


#8

经过一些测试,还是又转回utf-8方案。

(setenv "LANG" "zh_CN.UTF-8")
(set-language-environment 'Chinese-GBK)
(when (eq system-type 'windows-nt)
  (setq-default process-coding-system-alist
                '(("[pP][lL][iI][nN][kK]" utf-8-dos . gbk-dos)
                  ("[cC][mM][dD][pP][rR][oO][xX][yY]" utf-8-dos . gbk-dos)
                  ("cmd" gbk-dos . gbk-dos)
                  ("diff" utf-8-dos . gbk-dos)
                  ("*" utf-8-dos . gbk-dos)
                  )))
(prefer-coding-system 'utf-8)

环境spacemacs+cygwin下,此方案magit,SPC s g p, SPC p f,均正常。 遗留问题:find 在eshell下不能查中文名。 折中解决办法:在eshell中运行cmd,然后set LANG=zh_CN.GBK。再用find即可查询中文。


#9

emacs配置里加入下面这句测试可以解决

(modify-coding-system-alist ‘file "\.git/COMMIT_EDITMSG\’" 'utf-8) ; magit commit 时中文信息乱码解决


#10

win10默认utf8是没这个问题的?那为什么不想办法装个win10呢。。


#11

我一个笔记本、一个台式机,台式机装win10,笔记本装win7,笔记本配置比台式机差很多,装win10和台式电脑放一起对比感觉要慢好多,装win7却基本感觉不出来


#12

最近find-file-in-project发布了ffip-lisp-find-file-in-project命令,这个命令用纯Lisp写的,在项目中可以搜文件或者文件夹,不会有任何编码问题,开箱即用。就是速度没其他命令那么快。https://github.com/technomancy/find-file-in-project