完整保留手動輸入格式的表格編輯
是否曾經只修改了表格裡的一個詞,git diff 卻顯示整張表格都被改動?在 Markdown 中,表格是最常出現偏差的地方。

Markdown 表格會留下手動整理過的痕跡。把豎線排列整齊、用空格調整儲存格的寬度,有時也會刻意打亂對齊。那個樣子本身就是檔案的原文。
但以格狀顯示表格的編輯器必須解析原文。若在重新儲存時自動對齊表格,人所排出的樣子也會跟著改變。
Typora 的表格自動對齊就是廣為人知的這類情況。為了統一欄寬,它會在豎線之間填入空格,並將結果反映到儲存的內容中。這件事已有公開議題整理,也有人另外提出希望能透過選項將它關閉的請求。
mote 決定不這麼做。畫面上會以格狀顯示表格,但檔案裡會原封不動地保留手寫的原文。
只有正在修改的儲存格會顯示原文
在即時模式中點擊表格,格狀外觀依然保持不變。只有游標所在的儲存格會變成原文,豎線符號則會淡淡地顯示。
可以使用 Tab 或方向鍵移動到其他儲存格。在最後一列按下 Enter,就會新增一列。
選取操作也很自然。在儲存格內拖曳時,只會選取文字。若拖曳到儲存格外,就會以矩形選取多個儲存格;複製時,只有選取的儲存格會被製成表格。第一列會成為標題列,對齊方式也會保留。
從表格外開始的選取範圍碰到表格時,整張表格都會被選取。不會只彆扭地選到半張表格。
整列與整欄也都可以移動。將滑鼠移到表格上時,列的左側與欄的上方會出現控點。拖曳到想要的位置即可。
在右鍵選單中,可以新增或刪除列與欄。所有操作都會被當成一次編輯處理,因此可以一次還原。未碰觸的儲存格原文則不會改變。也可以在命令選擇區中找到相同的功能。

表格因為一條豎線而垮掉了
一開始,只要在表格內輸入豎線,就一律會在前面加上反斜線。因為當時只考慮到在儲存格內放入豎線字元的情況。
但是,對直接撰寫 Markdown 表格的人來說,豎線是分隔儲存格的符號。輸入新的一列時,連分隔符號都變成了文字,表格也因此垮掉了。
所以後來改成會判斷輸入的位置。
若在一列開頭的位置輸入豎線,就會忽略它。如果後方已經有分隔符號,則會將游標移到下一個儲存格。只有在儲存格內的句子中輸入豎線時,才會進行跳脫。在表格正下方撰寫以豎線開頭的列時,也會接續成既有表格的新列。
這類問題很難只靠閱讀程式碼發現。因此,我們建立了會在實際視窗中點擊表格並拖曳控點的測試。確認表格是否正確顯示、列與欄是否朝預期的方向移動,以及應用程式是否會在過程中當掉。
儲存之後,結果會顯得更清楚。若只修改一個儲存格中的一個詞,git diff 中也只會顯示那一列。
為了對齊欄位而加入的空格、項目符號的星號,以及行尾的兩個空格也都會保持原樣。若檔案原本沒有最後的換行,連這個狀態也會保留。儲存時,可以直接在狀態列看到變更了多少位元組。

也有做出來之後又移除的功能
曾經有一段時間可以用滑鼠調整欄寬。現在已經沒有了。
Markdown 沒有用來儲存欄寬的語法。若要記住寬度,就必須在文件旁建立另一個檔案。這樣一來,那個資料夾只有在有 mote 的情況下才是完整的。透過 git 搬移、在其他裝置上開啟,或使用其他編輯器時,這些資訊就會遺失。
表格框線則透過應用程式設定解決。可以選擇要顯示成格狀,或只在標題列下方畫線。畫面、PDF 與 HTML 匯出也會套用相同的設定。
原則很簡單。無法寫進 Markdown 的值,就放在應用程式設定裡,或是不將它做成功能。
所以我們移除了調整欄寬的功能。欄寬會依照內容自動決定。文件從頭到尾都只會保留為一個 .md 檔案。
將表格重新排得漂亮的編輯器,與原封不動守住我所寫表格的編輯器。
mote 選擇了後者。