跳到內容

在 Mac 上從螢幕截圖拷貝程式碼,不必重新輸入

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

若要在 Mac 上從螢幕截圖拷貝程式碼,請打開圖片,用 OCR 工具選取程式碼,然後把文字貼到你的編輯器。接著對照圖片讀一遍,因為 OCR 可能會把 l 和 1,或 O 和 0 這類字元搞混。

簡短回答:對於「預覽程式」或「照片」中的圖片,先試試即時文字。對於任何 App 視窗、影片或聊天中的程式碼,我的首選是 Optic,這是一款選單列 App,能拷貝你在螢幕上拖曳框選的任何區域中的文字(在 Mac App Store 為 4.99 美元(一次性購買))。

聲明:Optic 是我開發的。

為什麼重新輸入程式碼容易出錯

程式碼很嚴格。一個錯誤的引號、漏掉的括號,或搞混的 l 和 1,都會讓指令失效,而且錯誤訊息往往不會指向真正的原因。重新輸入一長串 docker run 指令,或帶有多個參數的 curl 呼叫,正是這類失誤最容易發生的地方。

程式碼老是出現在圖片裡:在社群媒體上以漂亮的螢幕截圖貼出的程式碼片段、以圖片展示範例的教學、滿是終端機擷圖的舊 wiki 頁面,以及在 Slack 或 Teams 中以螢幕截圖轉傳的程式碼。

先試試即時文字

macOS 的即時文字在 Apple 支援的地方有效:「預覽程式」、「照片」、「快速查看」和 Safari 中的圖片。在「預覽程式」中打開螢幕截圖,將指標移到程式碼上直到變成文字游標,選取,然後按 Command-C。

即時文字無法用於任意的 App 視窗、視訊通話,或繪製在 App 介面內的文字。如果程式碼在影片播放器、遠端桌面或螢幕分享中,你就需要螢幕 OCR 工具。

用 Optic 拷貝程式碼

Optic 讀取你所畫方框內螢幕上的任何內容。它本身不能打開圖片檔案,所以請先用「預覽程式」、瀏覽器或任何檢視器打開螢幕截圖。

  1. 點一下選單列中的 Optic 圖像。
  2. 選擇 擷取文字。
  3. 在程式碼上拖曳方框。如果圖片有行號,請不要框進去。
  4. 用 Command-V 貼到你的編輯器。

文字準備好時,會出現一個小小的「已拷貝到剪貼簿」提示。

開啟程式碼模式

在 Optic 的「設定」中,程式碼模式就是為這項工作設計的。它會依文字在圖片中的位置保留每一行的縮排,並關閉語言校正,讓辨識器不會把識別名稱「修正」成字典裡的單字。拷貝程式碼時請保持開啟,處理一般文章時再關閉。

換行預設是保留(保留),這正是程式碼所需要的。其他選項,移除和智慧合併,是用於段落的。

執行之前先檢查

辨識在你的 Mac 上使用 Apple 的 Vision 文字辨識進行。它對清晰、高對比的文字表現不錯,但終究還是 OCR。在把指令貼到終端機之前,請對照圖片檢查,尤其是:

  • 引號和反引號
  • l、1、I 和 O、0
  • 參數中的連字號和長破折號
  • Python 或 YAML 中的縮排

文字越大辨識越好,所以如果字體很小,請在拖曳之前先放大圖片。

連續擷取多個片段

每次擷取都會進入 Optic 在選單列彈出視窗中的歷史紀錄,其中保留最近 20 筆擷取與縮圖。如果教學展示了五個步驟,可以一個接一個擷取,需要時再從歷史紀錄中拷貝。歷史紀錄留在你的 Mac 上。

Optic 不適合的地方

  • 它不能打開圖片或 PDF 檔案。程式碼必須顯示在螢幕上。
  • 它一次只處理一個選取範圍。它不處理螢幕截圖的檔案夾或整份文件。
  • 它拷貝的是純文字。不會保留語法顏色,也不會偵測程式語言。
  • 它需要 macOS 的「螢幕錄製」權限才能讀取螢幕。

想進一步了解這個主題,請參閱Mac 上程式碼片段的 OCR和如何從螢幕上任何東西拷貝文字。如果你在比較 App,還有一份 Mac 螢幕 OCR App 的總整理。

常見問題

Mac 不用額外 App 也能從圖片拷貝程式碼嗎?

通常可以。「預覽程式」、「照片」、「快速查看」和 Safari 中的即時文字讓你選取圖片裡的文字。它無法用於影片、螢幕分享,或其他 App 視窗內的文字。對於螢幕上其他任何地方的程式碼,我的首選是開啟程式碼模式的 Optic。

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

在「設定」中開啟程式碼模式後,Optic 會依每一行在圖片中的位置保留縮排。對於縮排很重要的 Python 和 YAML,請檢查結果。

Optic 需要網際網路連線嗎?

不需要。文字辨識在 Mac 上進行,這個 App 沒有網路存取。

為什麼貼上的程式碼有錯誤的字元?

OCR 可能會混淆外觀相似的字元,例如 l 和 1。擷取前請先放大小字、使用程式碼模式,並將結果與圖片對照。

在 Mac App Store 取得 Optic · Optic 的所有資料