功能價格文件部落格
取得 mote
← 部落格
設計·2026年7月18日·閱讀時間 5 分鐘

打造不會破壞韓文組字的編輯器

用韓文寫長文時,有時會遇到最後一個音節消失,或單字被拆開的情況。那不是打字錯誤,而是編輯器在哪裡處理組字的問題。

m
mote
在即時模式下用韓文輸入的標題行。游標位於該行,因此 # 會以淡色顯示,而文字仍維持標題原有的大小與粗細。
在即時模式下用韓文輸入的標題行。游標位於該行,因此 # 會以淡色顯示,而文字仍維持標題原有的大小與粗細。

用韓文寫作時,偶爾會遇到一些奇怪的情況。文字會在行尾消失,切換到其他視窗再回來後,最後一個音節又會被輸入兩次。輸入途中,游標有時也會跑到莫名其妙的位置。

一開始很容易以為是自己操作失誤。但大多數時候,問題並不出在手上。這是因為編輯器沒有正確處理韓文的「組字」。

要輸入一個韓文字,必須多次按下子音和母音。在音節完成之前,它雖然顯示在畫面上,卻還不是已經確定的文字。這種狀態稱為組字。

這種狀態在英文中很少見,但輸入韓文時幾乎隨時都在組字。因此,即使組字處理只有一點小問題,也會對韓文使用者造成很大的不便。

光看公開的問題回報就能知道。Typora 有在 macOS 上韓文單字被拆開輸入的問題(#4251),以及組字期間游標跳動的問題(#788)。Obsidian 則有在 Ubuntu 上韓文隨機遺漏的問題(#79528)、在 Wayland 上無法輸入韓文的問題(#84391),以及輸入在換行處遭到忽略的論壇文章(#114224)。

應用程式雖然不同,問題發生的位置卻很相似。編輯器都在瀏覽器引擎上重新解讀組字事件。

不將尚未確定的文字放入文件

mote 的 Linux shell 不會直接解讀韓文組字。將子音和母音組成音節的工作會交給作業系統的輸入法。

組字中的文字只會顯示在畫面上。只有音節確定之後,才會進入文件。

光是這項原則,就讓許多問題消失了。

不會每次組字都產生復原紀錄。自動儲存也不會把尚未完成的音節寫入檔案。Markdown 功能也不會試圖替尚未確定的文字套用樣式。

想到自動儲存時,差異會更加明顯。輸入韓文期間,即使只是短暫停頓,音節也可能仍在組字。如果將組字中的文字放入文件,就可能儲存只完成一半的音節。按一次復原,也可能只刪除一個字母。

將組字留在文件之外,就不必另外處理這些例外。因為尚未確定的文字還不是文件的一部分。

輸入期間也不讓畫面晃動

一開始,我們會移除組字所在行的所有 Markdown 樣式。這看起來很安全,卻產生了新的問題。

在標題中輸入韓文時,那一行會突然縮小成內文大小。只有結束輸入後,才會恢復成標題。由於韓文使用者輸入時會持續組字,行高也會在整個書寫過程中不停上下變動。

現在則會按照組字中的文字實際出現在行內的樣子進行計算。輸入標題時,正在組合的音節也會維持標題樣式。即使在粗體文字中輸入,粗細也不會改變。隱藏的 Markdown 符號也不會蓋住組字中的文字。

我們也移除了原本顯示在組字中文字下方的藍色底線。因為輸入韓文時,句子下方看起來會一直閃爍。即使沒有底線,組字功能仍會照常運作。

這不只是單純的畫面效果。即使所有文字都能順利輸入,只要整行持續晃動,就會打斷寫作的節奏。畫面必須保持安靜,才能專注於句子。

在粗體中輸入韓文的那一行——游標位於該行,因此 ** 標記會以灰色顯示,而其中的「粗體」仍維持原有的粗細。
在粗體中輸入韓文的那一行——游標位於該行,因此 ** 標記會以灰色顯示,而其中的「粗體」仍維持原有的粗細。

不只說「支援韓文」,而是確認實際行為

只說「支援韓文」還不夠。

無法知道究竟只要能輸入文字就算支援,還是輸入期間畫面也必須保持穩定。也很難確認切換到其他視窗再回來後,最後一個音節是否不會消失或重複輸入。

因此,mote 將模糊的承諾轉換成具體的檢查項目。每次發布時,都會使用實際的輸入法,在實際畫面中直接輸入韓文。我們會在 9 種情境下確認 12 項條件,並由腳本將結果儲存成檔案。最近一次執行通過了全部 12 項條件。

檢查項目也不是憑空想像出來的。我們根據其他編輯器公開的韓文輸入問題,以及 mote 中實際可能發生問題的畫面來制定。

我們會確認在強調文字中輸入時,游標是否不會移動。也會查看切換到其他視窗再回來時,最後一個音節是否只會正確確定一次。還會檢查在搜尋視窗輸入韓文後返回編輯畫面的情況。我們也會在表格儲存格、清單的下一行和標題中重複相同的過程。

檢查內容很具體。例如,在組合音節期間按下 Enter 時,完成的音節必須留在第一行,只有新輸入的字母會移到第二行。在組合「한」的過程中按一次 Backspace,也必須變成「하」,而不是整個字都消失。

只要混淆了字母和完成的文字,就會立即判定失敗。

每次發布時都必須通過的項目表——左側是要輸入什麼,中間是必須符合什麼條件才算通過,右側則是產生該項目的公開問題編號。
每次發布時都必須通過的項目表——左側是要輸入什麼,中間是必須符合什麼條件才算通過,右側則是產生該項目的公開問題編號。

未經確認的環境,就不宣稱支援

每次發布時會直接確認的環境,是 Linux shell 的 X11 與 ibus 組合。

Wayland 和 fcitx5 會在另外 8 種實驗環境中確認基本的組字行為。但檢查範圍並不相同。macOS 和 Windows shell 也仍在開發中。在完成各作業系統輸入方式的驗證之前,我們不會宣稱支援。

也有一些問題不是 mote 能夠修正的。最具代表性的例子,就是輸入法每次開啟新的輸入視窗時,都會從英文模式開始。關閉搜尋視窗並返回編輯畫面後,可能必須再次按下韓/英切換鍵。

這個問題普遍存在於 GTK 應用程式中,也可以在輸入法設定中修改。我們不會把不是我們的錯誤寫得像是我們的錯誤。相對地,我們會記下該設定位於何處。

能輸入韓文的編輯器,和適合用韓文寫作的編輯器並不一樣。

前者能讓文字輸入進去。後者則讓文章在輸入期間也不會晃動。

← 較舊0.9.0-beta.1:首次公開測試版包含了什麼較新 →為什麼每次都要在八種 Linux 環境中測試
透過 RSS 持續關注。
只留下文字。
繁體中文
© 2026 mote