前言
第一篇: 介紹編寫外掛的準備和如何釋出.
第二篇: 介紹外掛簡單功能的具體編寫過程.
第三篇: 介紹外掛開發遇到的問題和解決的方案
解決問題
換行符
問題描述
開發完以後就美滋滋地開始用了,在格式化之前自己寫的一個md,取名為 1.md
時,突然發現每格式化一次後,都會在空行後多出一個空行
解決過程
自己將檔案刪減到只有兩行,依然發現還會多出空行,然後新建一個md檔案,,取名為 2.md
,將內容複製拷貝過去以後,發現在 2.md
中可以正確地格式化。這就奇怪了,明明內容是一樣的啊,檢視兩個檔案描述,發現相差一個位元組。
再想到1.md
是從之前的window
平臺拷貝過來,而2.md
是在osx
平臺新建的,於是去查了下資料,原來是兩個平臺的換行符是有差異的。
簡單地說, window
平臺下的換行符為 \r\n
,而 osx
平臺的換行符為\n
。因此,用一段正則統一兩個平臺的換行符即可。
const LINE_BREAK_EXP = /\r\n/g;
複製程式碼
在這裡,稍微提一下。
-
\r
為回車,作用是游標返回當前行首。 -
\n
為換行, 作用為游標移動到下一行。
這兩個符號是從打字機開始出現,後來繼承到電腦上。
而Unix
平臺認為 \n
就闊以了,還省個位元組,window
認為 \r\n
才是正統, osx
以前用 \r
,萬幸現在和 Unix
一樣了。
多次格式化
問題描述
在格式化js程式碼後,會將程式碼段(用```包裹的程式碼)中已經格式化過地程式碼,再次格式化,出現問題。
例如:
function(){var a = 100; settimeout(function(){console.log('hello')}),100}
複製程式碼
格式化以後
function(){
var a = 100;
settimeout(function(){
console.log('hello')
},100)
}
複製程式碼
再次點選格式化,
function(){
var a = 100;
settimeout(
function(){
console.log('hello')
}
,100)
}
複製程式碼
解決過程
這個問題就比較容易發現原因, 是因為被格式化後的程式碼段中出現了多行以4個空格或者tab開頭的行,他們也符合程式碼塊(就是以空格或者tab開頭)的匹配規則,因此被重複格式化。
我沒有找到更好的正則匹配方式,因此我的思路是,將已經格式化過的程式碼段從內容中移除,再執行格式化程式碼塊,最後再補全內容。
反思優化
依然還是有些不足滴,粗略說兩個
-
使用者每次點選
command+shift+f
的時候,都會執行格式化,從效率角度,應當有個變數標記內容是否更改,如果沒有更改就直接返回。 -
目前只支援js的格式化,我想應該也有其他格式的程式碼的庫,作為後續可以擴充套件的功能。
目前開發了一些功能,算是可以用了,個人格式化了40篇md沒有什麼問題.
開發兩小時,修了兩天bug
在vscode外掛裡查詢
git地址在這裡~
程式碼在這裡,star隨意,歡迎issues~, 也歡迎大家在vscode中使用,我會持續更新~