vscode控制字符引起的问题以及解决思路
1. 環境
- macOS Sierra 10.12.5
- vscode 1.20.0 最新版
2. 如何重現這個問題
在使用中文輸入法輸入中文的時候,一直按后退鍵,例如輸入sfsf,當你按了4下后退鍵時,你會發現,搜狗輸入法彈出框雖然消失了,但是頁面上還會剩下一個s, 這是你如何再次按一下后退的話,s就會變成bs, 變成隱藏字符。這個一般是右邊有markdown渲染插件時才會出現。
從更確切的角度說,是你的編輯器一旦開了webview,就會出現這個問題,即使是vscode的歡迎頁,也是webview,也會導致這個問題。所以最好在寫代碼時盡量關閉webview。
3. 如何讓隱藏字符現身
Mac版的vscode控制字符一般是不會顯示出來的,可以用一下的方法讓其顯示出來
"editor.renderControlCharacters": true在編輯器中顯示的像很小的BS, 表示backspace的意思。一般是在輸入時,按了后退或者刪除會偶爾出現這個字符。
4. 隱藏的控制字符會出現什么問題?
4.1. 控制字符在github上會出現問號
例如下圖的的和同字之間就是出現一個隱藏字符,在github上就會出現一個帶有背景的問號。
4.2. 控制字符在Hexo NexT Local Search 會導致search.xml渲染失敗,搜索框一直在轉圈
如果你使用瀏覽器打開search.xml,會發現解析報錯
5. 如何解決
5.1. 手動刪除隱藏字符
可以使用替換,先復制一個隱藏字符,然后把隱藏字符替換成空
5.2. 使用插件 Remove backspace control character
Remove backspace control character
在本家chromium已被合并,因此,在8月上旬發行的vscode 1.15將會重新確定(vscode 1.15, electron 1.7.4)。事實上,到現在這個問題還是沒解決的
特點
格式化程序,用于刪除打開的文檔中包含的控制字符。要被刪除的控制字符默認如下。
/[\u0000]|[\u0001]|[\u0002]|[\u0003]|[\u0004]|[\u0005]|[\u0006]|[\u0007]|[\u0008]|[\u000b]|[\u000c]|[\u000d]|[\u000e]|[\u000f]|[\u0010]|[\u0011]|[\u0012]|[\u0013]|[\u0014]|[\u0015]|[\u0016]|[\u0017]|[\u0018]|[\u0019]|[\u001a]|[\u001b]|[\u001c]|[\u001d]|[\u001e]|[\u001f]|[\u001c]|[\u007f]/gm用法
- "editor.formatOnSave": true 如果被設定,保存時啟動
- "editor.formatOnType": true 在被設定的情況下,進行變換時;輸入時啟動
5.3. 坐等官方給出更好的解決方案
官方這個bug依然還是open狀態。Using IME with markdown preview enabled, press ESC/BACKSPACE leads in control characters #37114
5.4. 關閉所有webview
這個問題一般出現在標簽頁含有webview時發生,所以在升級到vscode最新版后,在寫代碼時要注意,不要開啟任何有webview的標簽頁,其中包括
- 關閉markdown渲染插件實時渲染的功能
- 關閉vscode歡迎頁標簽頁
6. 為什么官方不直接解決這個問題?
- vscode底層使用了electron,這是electron的Backspace can not erase the last one character during Japanese IME conversion (macOS) #9173bug, electron不解決這個問題,vscode就不會解決。
- electron底層使用了chromium, 這是chromium的Two backspaces required to delete last character in webview inputbug, chromium不解決,elctron就無法解決。
- 綜上,截止文章寫出之時,這個問題依然沒解決。
7. 參考
- Mac 上的 VSCode 編寫 Markdown 總是出現隱藏字符?
- Hexo next 主題的 local search 功能失效,點擊搜索鏈接無法彈出疊加層
- Backspace can not erase the last one character during Chinese/Japanese IME conversion (macOS) #24981
- Backspace can not erase the last one character during Japanese IME conversion (macOS) #9173
- Two backspaces required to delete last character in webview input
- 控制字符
- Using IME with markdown preview enabled, press ESC/BACKSPACE leads in control characters #37114
總結
以上是生活随笔為你收集整理的vscode控制字符引起的问题以及解决思路的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: STM32 移植FreeModbus 详
- 下一篇: Servlet处理文件下载的编码问题,乱