suchen

Heim  >  Fragen und Antworten  >  Hauptteil

windows-7 – Der chinesische Pfad des Windows-Befehlszeilenfensters, das mit dem Befehl GVim :!% angezeigt wird, ist verstümmelt. Wie kann man das Problem lösen?

Öffnen Sie eine Datei in einem chinesischen Verzeichnis. Solange das aktuelle Verzeichnis von GVIM nicht das chinesische Verzeichnis ist oder der Dateiname chinesisch ist, geben Sie :!% im Befehlsmodus ein und dieses Fenster wird angezeigt und ein Fehler wird gemeldet. Es gibt kein Problem mit dem englischen Dateinamen oder dem englischen Pfad.

巴扎黑巴扎黑2742 Tage vor996

Antworte allen(3)Ich werde antworten

  • 黄舟

    黄舟2017-05-16 16:41:56

    这个貌似与中文或英文没什么关系呢,先看两个截图:


    按照你的描述,我依次操作了一个中文文件名和一个英文文件名的文件,显示的结果都是如此。

    关键是 :!% 命令到底是什么意思。:! 是在 vim shell 里执行一个 shell 命令,而 % 指代当前的文件名于是你的操作等于把文件名当作一个 command 来执行了,那么不管是中文还是英文都会报 command not found,也就是你在 windows 下看到的“系统找不到指定的路径”吧。

    不知道你输入 :!% 命令的目的是什么呢?如果是为了打开文件,那么可以 :!open %,这个在 Mac 下是可以打开当前 buffer 里的文件内容的,至于 windows 的话我就不太清楚了。

    Antwort
    0
  • 某草草

    某草草2017-05-16 16:41:56

    gvim默认会将字符以utf-8的格式发送给系统. 参照 h:termencoding
    你这种情况就是将 utf-8 的中文字符发送给系统cmd, 然后通过 cp936 的编码来显示. 所以显示是乱码的.
    你可以这样测试来验证: set encoding=cp936 强制用cp936显示; 然后 !% , 执行该文件, cmd跳出的文件名乱码与你强制显示的内容一致

    Antwort
    0
  • 高洛峰

    高洛峰2017-05-16 16:41:56

    最近我发现了一个好办法。之前很清楚的是,CMD 窗口是「cp936」,GVIM 传出的文件名称则是「UTF-8」。

    所以,使用 GVIM 的 iconv() 函数便可以将 GVIM 内部的「UTF-8」转换成「cp936」并传给 CMD 。这样一来则可以解决之前的问题。
    我目前是可以用这句来完成的:

    :execute "!".iconv('"'.@%.'"','UTF-8','cp936')
    

    稍微修改一下还可以拥有其他功能。

    主要思路来自:http://www.oschina.net/code/snippet_574132_13357

    Antwort
    0
  • StornierenAntwort