windows-7 - GVim :!% 指令跳出的 Windows 命令列視窗中文路徑亂碼,怎麼解決?
巴扎黑
巴扎黑 2017-05-16 16:39:56
0
3
993

#

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

巴扎黑
巴扎黑

全部回覆(3)
黄舟

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


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

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

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

某草草

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

小葫芦

最近我發現了一個好方法。之前很清楚的是,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

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板