搜尋

首頁  >  問答  >  主體

windows-7 - GVim :!% 指令跳出的 Windows 命令列視窗中文路徑亂碼,怎麼解決?

#

在中文目錄開啟某個文件,只要GVIM 的目前目錄不是這個中文目錄或檔案名稱是中文的時候,在指令模式輸入:!%就會跳出這個視窗並報錯…英文檔名或英文路徑都沒問題。

巴扎黑巴扎黑2776 天前1026

全部回覆(3)我來回復

  • 黄舟

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

    這個似乎與中文或英文沒什麼關係呢,先看兩張截圖:


    按照你的描述,我依序操作了一個中文文件名和一個英文文件名的文件,顯示的結果都是如此。

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

    不知道你輸入 :!% 命令的目的是什么呢?如果是为了打开文件,那么可以 :!open %,這個在 Mac 下是可以打開目前 buffer 裡的文件內容的,至於 windows 的話我就不太清楚了。

    回覆
    0
  • 某草草

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

    gvim預設會將字元以utf-8的格式傳送給系統. 參考 h:termencoding
    你這種情況就是將 utf-8 的中文字元傳送給系統cmd, 然後透過 cp936 的編碼來顯示. 所以顯示是亂碼的.
    你可以這樣測試來驗證: set encoding=cp936 強制用cp936顯示; 然後 !% , 執行該檔, cmd跳出的檔名亂碼與你強制顯示的內容一致

    回覆
    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

    回覆
    0
  • 取消回覆