#
在中文目錄開啟某個文件,只要GVIM 的目前目錄不是這個中文目錄或檔案名稱是中文的時候,在指令模式輸入:!%
就會跳出這個視窗並報錯…英文檔名或英文路徑都沒問題。
黄舟2017-05-16 16:41:56
這個似乎與中文或英文沒什麼關係呢,先看兩張截圖:
按照你的描述,我依序操作了一個中文文件名和一個英文文件名的文件,顯示的結果都是如此。
關鍵是 :!%
命令到底是什么意思。:!
是在 vim shell 里执行一个 shell 命令,而 %
指代当前的文件名于是你的操作等于把文件名当作一个 command 来执行了,那么不管是中文还是英文都会报 command not found
,也就是你在 windows 下看到的「系統找不到指定的路徑」吧。
不知道你輸入 :!%
命令的目的是什么呢?如果是为了打开文件,那么可以 :!open %
,這個在 Mac 下是可以打開目前 buffer 裡的文件內容的,至於 windows 的話我就不太清楚了。
某草草2017-05-16 16:41:56
gvim預設會將字元以utf-8的格式傳送給系統. 參考 h:termencoding
你這種情況就是將 utf-8 的中文字元傳送給系統cmd, 然後透過 cp936 的編碼來顯示. 所以顯示是亂碼的.
你可以這樣測試來驗證: set encoding=cp936 強制用cp936顯示; 然後 !% , 執行該檔, cmd跳出的檔名亂碼與你強制顯示的內容一致
高洛峰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