跳到內容

Mac 上的程式碼片段 OCR:從教學與螢幕截圖拷貝程式碼

作者:Eduard Bruch,Optic 開發者 · 更新日期:

若要拷貝只以圖片呈現的程式碼,請讓 OCR 從螢幕上讀取它,然後在執行之前先檢查。即時文字適用於 Apple App 中的圖片;具備程式碼模式的螢幕 OCR App 則在任何地方都能用,並保留縮排。

簡短回答:對於你能在「預覽程式」中打開的螢幕截圖裡的程式碼,請試試即時文字。對於影片中的程式碼、聊天裡的 IDE 螢幕截圖,或只有圖片的文件,我的首選是 Optic,這是一款選單列 App,能拷貝你在螢幕上拖曳框選的任何區域中的文字(在 Mac App Store 為 4.99 美元(一次性購買)),並有專門用於程式碼的程式碼模式。

聲明:Optic 是我開發的。

為什麼程式碼是最難重新輸入的文字

一般文章能容忍小錯誤;程式碼不行。用連字號取代底線會破壞 import,漏掉一個括號會破壞函式,在錯誤位置的一個小寫字母會改變變數。很長的 shell 指令、正規表示式和設定區塊,正是人們常以螢幕截圖分享的東西,也正是最容易打錯的東西。

選項 1:即時文字

即時文字在 Apple 支援的地方有效:「預覽程式」、「照片」、「快速查看」和 Safari 中的圖片,以及部分播放器中暫停的影片畫格。它無法用於任意的 App 視窗、視訊通話或介面文字。對於「預覽程式」中單一的程式碼螢幕截圖,值得試試選取並拷貝文字。貼上後請檢查縮排,因為一般的文字辨識常在這裡出問題。

選項 2:開啟程式碼模式的 Optic

Optic 可以從螢幕上任何地方讀取程式碼:教學頁面、暫停的影片、Slack 中的螢幕截圖,或 pull request 的留言。

  1. 在 Optic 的「設定」中,開啟程式碼模式(只需一次)。
  2. 讓程式碼顯示在螢幕上。
  3. 點一下選單列中的 Optic 圖像,選擇 擷取文字。
  4. 在片段上拖曳方框。
  5. 用 Command-V 貼到你的編輯器或終端機。

程式碼模式改變了什麼:

  • 保留縮排。Optic 會依文字在圖片中的位置推算每一行的縮排,所以巢狀的區塊會維持巢狀。這對 Python 和 YAML 很重要。
  • 關閉語言校正。一般的文字辨識可能會把不常見的字「校正」成真實的字。對於程式碼,這會改變識別名稱,所以程式碼模式會把它關閉。

辨識在 Mac 上使用 Apple 的 Vision 框架,不需要網際網路,Optic 也沒有網路存取。當螢幕截圖顯示的是內部程式碼時,這很有用。

典型情況

  • 文件中的終端機指令。從終端機螢幕截圖拷貝安裝或建置指令。
  • 同事傳來的 IDE 螢幕截圖。把聊天中螢幕截圖裡的程式碼放進你的編輯器,在那裡你才能真正閱讀和測試它。請參閱在 Mac 上從 Slack 圖片拷貝文字。
  • 程式設計影片。暫停影片並擷取螢幕上的程式碼。
  • 同一個教學中的多個片段。依序擷取每個區塊;你最近 20 筆擷取會保留在選單列歷史紀錄中,所以當你在專案裡做到那一步時,可以再次拷貝每一個。

執行之前先檢查

OCR 在清晰、高解析度的程式碼上表現不錯,但仍可能混淆相似的字元:0 和 O、1、l 和 I,或直引號和彎引號,尤其是在小字或模糊的文字中。執行之前先讀過你貼上的內容,並讓編輯器的語法醒目提示指出任何奇怪之處。請不要在沒有讀過的情況下,把 OCR 的輸出直接貼到具有 root 權限的 shell。

Optic 不適合的地方

  • 沒有檔案匯入。它不能打開圖片或 PDF;請先把它們顯示在螢幕上。
  • 沒有批次。一次拖曳只有一次擷取,所以一份 30 頁的程式碼清單 PDF,是文件 OCR 工具的工作。
  • 沒有語法感知。Optic 辨識字元;它不檢查或格式化程式碼。
  • 手寫。白板照片上的程式碼,Optic 並不承諾能讀取。

想進一步了解程式碼的螢幕截圖,請參閱在 Mac 上從螢幕截圖拷貝程式碼。

常見問題

如何在 Mac 上從 YouTube 教學拷貝程式碼?

暫停影片讓程式碼清晰,然後用開啟程式碼模式的 Optic 這類螢幕 OCR App 在上面拖曳,並貼到你的編輯器。

OCR 會保留程式碼的縮排嗎?

使用 Optic 的程式碼模式會:縮排是依每一行的位置重建的。沒有程式碼模式的話,許多 OCR 工具回傳的各行都沒有開頭的空格。

OCR 出來的程式碼可靠到可以直接執行嗎?

通常很接近,但請檢查。外觀相似的字元是常見的錯誤,所以執行之前請先閱讀程式碼。

Optic 會把我的程式碼傳送到任何地方嗎?

不會。辨識在 Mac 上進行,這個 App 沒有網路存取。

在 Mac App Store 取得 Optic · Optic 的所有資料。Optic 需要 macOS 14 Sonoma 或更新版本。想比較工具嗎?請參閱 Optic 與 TextSniper。