AutoCAD
AutoCAD LISP 怎麼用?.lsp 去哪找、怎麼載入、開圖自動載入
拿到一個 .lsp 檔,要怎麼在 AutoCAD 裡用?載入的方法有好幾種, 差別在於「只用這一次」還是「每次開圖都要能用」。以下先說明 LISP 是什麼、去哪找, 再依使用情境整理載入方式,以及 acad.lsp 和 acaddoc.lsp 的差別、沒有載入時怎麼查、中毒時怎麼處理。
內容依 Autodesk AutoCAD 2025 的繁體中文說明整理,以 Windows 版的完整 AutoCAD 為準; AutoCAD LT 從 2024 起也能載入 LISP,檔名不同的地方會另外標出。
本文目錄(11 節)
LISP 是什麼:.lsp、.fas、.vlx
在 AutoCAD 裡說的 LISP,指的是 AutoLISP,AutoCAD 內建的程式語言。 完整版 AutoCAD 內建 LISP 解譯器,可以在指令行直接輸入 AutoLISP 程式碼,也可以從檔案載入; 網路上、同事或廠商提供的 LISP 小工具,載入之後就會多出新的指令。AutoCAD LT 則是 2024 起才能載入 LISP, 能用的範圍見AutoCAD LT 能用 LISP 嗎?。
| 副檔名 | 內容 | 能不能用文字編輯器看 |
|---|---|---|
.lsp | AutoLISP 原始碼,文字檔 | 可以,指令名稱與開頭的說明註解都看得到 |
.fas | 單一 LSP 檔編譯成的二進位檔 | 不行 |
.vlx | 一個或多個 LSP、DCL(對話方塊)檔編譯成的集合,只有 Windows 版支援 | 不行 |
三種格式都用下面的方法載入。.lsp 檔從 AutoCAD 2021 起可以存成 ASCII 或 Unicode, 2020 與更早的版本只支援 ASCII;檔案裡有中文提示文字時,要留意存檔的編碼。
LISP 去哪找:內建常式、Express Tools、網路與廠商
- AutoCAD 本身:Autodesk 說明提到,有些標準的 AutoCAD 指令本身就是 AutoLISP 應用程式, 產品也附了許多有用的常式,知道怎麼載入並使用這些常式,有助於提升生產力。
- Express Tools:完整版 AutoCAD 預設安裝就包含 Express Tools,在指令行輸入
EXPRESSTOOLS啟用,再按功能區上的「Express Tools」頁籤使用。這些工具免費, 但 Autodesk 不提供支援,只有英文版,也不支援雙位元字元。 - 網路與協力廠商:說明也提到可以從網際網路或協力開發廠商下載 AutoLISP 應用程式。 來源不明的程式先看過程式碼再執行,檢查方式見下載來的 LISP,載入前先檢查。
- 現成的不合用:圖框、圖層、檔名規則跟公司不一樣時,現成的 LISP 可能只解決一部分, 這時可以照公司的規則另外寫,見AutoCAD 二次開發・LISP 外掛程式。
方法一:APPLOAD 載入應用程式
最基本的方式,適合先試用一個 LISP:
- 在指令行輸入
APPLOAD,或按「管理」頁籤 →「應用程式」面板 →「載入應用程式」, 開啟「載入/卸載應用程式」對話方塊 - 找到
.lsp(或.fas、.vlx)檔,選取後按「載入」 - 按「關閉」。LSP、FAS、VLX 會先排入佇列,關閉對話方塊時才載入
這種方式只對目前開啟的圖面有效,開另一張圖時需要重新載入。
方法二:直接拖曳檔案
從檔案總管把 .lsp 檔拖曳到 AutoCAD 的繪製區,也可以載入, 效果和 APPLOAD 相同,一樣只對目前圖面有效。適合臨時測試。
每次啟動都自動載入:啟動套件
常用的 LISP 不想每次手動載入,可以加到 APPLOAD 的「啟動套件」,每次啟動 AutoCAD 時就會自動載入:
- 輸入
APPLOAD開啟「載入/卸載應用程式」對話方塊 - 在「啟動套件」區塊按「內容」
- 在「啟動套件」對話方塊按「加入」,選擇要自動載入的
.lsp檔 - 關閉對話方塊
- 加入啟動套件的檔案,必須放在「可信任的位置」裡的資料夾(設定方式見後面的〈公司統一設定〉)
- 啟動套件要在每部電腦上各自設定,換電腦或重灌後需要重新加入;很多人要用時,改用後面的 acaddoc.lsp 比較好管理
acad.lsp 和 acaddoc.lsp 差在哪、放在哪裡
除了啟動套件,AutoCAD 還會自動載入兩個使用者自己建立的啟動檔:acad.lsp 和 acaddoc.lsp。 Windows 版 AutoCAD LT 對應的檔名是 acadlt.lsp 和 acadltdoc.lsp; Mac 版 AutoCAD 一樣用 acad.lsp、acaddoc.lsp,Mac 版 AutoCAD LT 則不會自動載入這些檔案。
| acad.lsp(LT 是 acadlt.lsp) | acaddoc.lsp(LT 是 acadltdoc.lsp) | |
|---|---|---|
| 什麼時候載入 | 預設只在 AutoCAD 啟動時載入一次;ACADLSPASDOC 系統變數設為 1 時,每新建或開啟一張圖都重新載入 | 每次新建或開啟圖面都載入,不受 ACADLSPASDOC 影響 |
| 裡面定義的函數與變數 | 只能在第一張圖使用 | 每張圖都能用 |
| AutoCAD 去哪裡找 | 啟動時在支援檔搜尋路徑中找 | 開圖時依資源庫路徑的順序找(每個圖面資料夾可以放不同的 acaddoc.lsp) |
| 適合放什麼 | 只需要在 AutoCAD 啟動時做一次的事 | 每張圖都要能用的 LISP 工具 |
- 這兩個檔案 AutoCAD 都沒有附,要自己建立、自己維護
- 不要修改 AutoCAD 內附、檔名帶版本號的
acad2025.lsp、acad2025doc.lsp(LT 是 acadlt2025.lsp、acadlt2025doc.lsp)。這些是 Autodesk 提供的版本專用定義,會在 acad.lsp、acaddoc.lsp 之前載入 - 在啟動檔裡用
command函數呼叫指令,只能寫在defun裡面。開圖後要馬上執行的指令, 說明的做法是寫在S::STARTUP函數裡;要附加到別的程式已經定義的 S::STARTUP,必須用defun-q定義
我的建議是:每張圖都要用的工具寫進 acaddoc.lsp,acad.lsp 只留給啟動時做一次的事。 Autodesk 說明也提到,可以把要在所有圖面使用的常式從 acad.lsp 移到 acaddoc.lsp。
公司統一設定:acaddoc.lsp 與支援路徑
部門裡很多人要用同一套 LISP 時,逐台設定啟動套件很麻煩,可以改用 acaddoc.lsp: 把它和共用的 LISP 放進同一個資料夾,再把資料夾加進支援檔搜尋路徑,每張圖開啟時都會載入。
- 把共用的 LISP 集中放在一個資料夾(例如公司伺服器上的共用資料夾)
- 到「選項」→「檔案」→「支援檔搜尋路徑」加入這個資料夾
- 同樣把資料夾加入「可信任的位置」,避免安全性警告;可信任的位置要重新啟動 AutoCAD 才生效
- 在資料夾中建立
acaddoc.lsp,每個要載入的檔案寫一行。加上載入失敗時要顯示的訊息, 某個檔案出錯時指令行會告訴你是哪一個,其他檔案也會繼續載入:
(princ (load "批次列印.lsp" "\n批次列印.lsp 沒有載入"))
(princ (load "圖框工具.lsp" "\n圖框工具.lsp 沒有載入"))
(princ)- 共用的 LISP 不在支援檔搜尋路徑裡時,
load要寫完整路徑,資料夾之間用一個斜線/或兩個反斜線\\分隔,例如(load "d:/CAD/lisp/批次列印.lsp"); 單一反斜線在 AutoLISP 中有特殊意義,不能當分隔符號 - AutoCAD 依支援檔搜尋路徑的順序尋找,同名檔案在好幾個資料夾都有時,只用找到的第一個
- AutoCAD LT(2024 起)對應的檔名是
acadltdoc.lsp
更新工具時只要替換共用資料夾裡的檔案,所有人重新開圖就會用到新版本。
載入之後,指令要怎麼執行
LISP 載入後,在指令行輸入程式定義的指令名稱即可執行。指令名稱不一定跟檔名相同, 用文字編輯器打開檔案,找到 (defun c: 後面的文字,例如 (defun c:BPLOT, 就在指令行輸入 BPLOT。
常用的工具也可以在自訂使用者介面(CUI)中做成功能區按鈕或工具列按鈕,點一下就執行; 按鈕裡的指令巨集怎麼寫,見AutoCAD 巨集指令怎麼寫。
下載來的 LISP,載入前先檢查
LISP 可以從網路或協力廠商取得,但它能直接執行指令、修改圖面,來源不明的檔案可能夾帶惡意程式碼。 Autodesk 說明的建議是:未知的 AutoLISP 檔,一律先檢查程式碼再執行。
- .lsp 先用文字編輯器打開:分號
;開頭的行是註解,有寫用途、用法與作者的話先讀過;defun c:後面是指令名稱。看不懂、也問不到作者的程式,不要直接載入正式的圖面 - .fas、.vlx 看不到內容:這兩種是編譯過的檔案,只用信得過的來源提供的版本
- 跳出「檔案載入 - 安全性考量訊息」:表示檔案不在可信任的位置。確定可以信任才按「載入」,不確定就按「不要載入」
- 確認沒問題再放進固定資料夾:把程式放在專用的資料夾、和圖檔分開,再加入「可信任的位置」; Autodesk 建議這個資料夾設成唯讀
- 留意跟圖檔一起寄來的 acad.lsp、acaddoc.lsp:這類檔案可能被改過,處理方式見下一節
安全性警告由 SECURELOAD 系統變數控制:初始值 1 是可信任的位置以外的檔案先警告, 2 是只載入可信任的位置裡的檔案,0 是不警告直接載入(說明不建議使用)。 也可以用 SECURITYOPTIONS 指令開「安全選項」對話方塊一起設定。
acad.lsp、acaddoc.lsp 中毒怎麼處理
acad.lsp、acaddoc.lsp 會被 AutoCAD 自動載入,所以惡意程式也會利用這兩個檔名。Autodesk 說明舉的例子是: 和圖面一起包在 ZIP 檔裡的專案檔案,可能含有被改過的 acad.lsp、acaddoc.lsp,以及含惡意程式碼的 FAS、VLX 檔; 說明也提到,許多病毒會在 acad.mnl 裡加一行,讓自己跟著被載入。
懷疑已經中毒時,Autodesk 說明〈修復惡意程式碼的攻擊〉列的一般步驟是:
- 執行防毒軟體掃描
- 用
/safemode指令行切換啟動 AutoCAD。這時 Express Tools 和大多數指令都無法使用, 只在清理期間暫時這樣開 - 找出並移除所有惡意程式碼。說明提到,以系統管理員身分執行又關閉「使用者帳戶控制」(UAC) 時會比較難處理, AutoCAD 的安裝資料夾也可能受到影響
- 修復受影響的檔案
- 把
SECURELOAD系統變數設為 1 或 2 - 把
TRUSTEDPATHS系統變數設為專用、唯讀的資料夾 - 從啟動參數移除
/safemode
平常讓 LEGACYCODESEARCH 系統變數保持 0,AutoCAD 就不會從「開始」資料夾和圖面所在的資料夾尋找並載入這類檔案; 收到和圖檔放在一起的 acad.lsp、acaddoc.lsp,不要放進支援路徑或可信任的位置,先用文字編輯器打開看過。
載入失敗時先檢查這幾點
跳出安全性警告,或完全載入不了
AutoCAD 會限制從不受信任的資料夾載入程式。請把 LISP 所在資料夾加到「選項」→「檔案」→「可信任的位置」, 再重新啟動 AutoCAD。詳細說明見AutoLISP 跑不動?錯誤訊息對照。
acaddoc.lsp 沒有載入,或只載入一半
- acaddoc.lsp 要放在支援檔搜尋路徑裡的資料夾,資料夾也要加入可信任的位置;
SECURELOAD為 2 時,不在可信任的位置的 LSP、FAS、VLX 都不會載入 - 啟動檔載入時只要發生 AutoLISP 錯誤,檔案剩下的部分就會被略過;說明提到,load 指定的檔案不存在或不在路徑中, 就會造成這種錯誤。每行 load 都加上失敗時的訊息(寫法見上面的範例),指令行會顯示是哪個檔案沒載入,後面的檔案繼續載入
command函數只能寫在defun裡面- acaddoc.lsp 是開圖時才找、才載入,改完要重新開圖;acad.lsp 預設只在啟動時載入,改完要重新啟動 AutoCAD
- AutoCAD LT 的檔名是 acadltdoc.lsp,寫成 acaddoc.lsp 不會載入
改了 LSP,載入的卻還是舊版
同一個資料夾裡有同名的 .lsp、.fas、.vlx,而 (load "檔名") 沒寫副檔名時, Autodesk 的說明有兩種寫法:2025 繁體中文說明寫的是載入修改時間最新的那一個, 英文版的 load 函數參考則寫依 .vlx、.fas、.lsp 的順序找,找到就停。 不論哪一種,資料夾裡留著舊的編譯檔,都可能比剛改好的 .lsp 先被載入。 載入時寫完整檔名(含副檔名),或把舊的編譯檔移走。支援檔搜尋路徑的不同資料夾裡有同名檔案時,也只會用找到的第一個。
AutoCAD LT 可以載入嗎?
AutoCAD LT 2024 以後可以載入 LISP,更早的 LT 版本不行;LT 開圖自動載入用的檔名是 acadltdoc.lsp。 兩者能用的範圍有差異,見AutoCAD LT 能用 LISP 嗎?。
參考資料(Autodesk AutoCAD 2025 說明):關於 AutoLISP 應用程式、關於載入 AutoLISP 應用程式、關於自動載入和執行 AutoLISP 常式概述、關於載入啟動檔案時 AutoLISP 出錯概述、關於 AutoLISP 相容性、「載入/卸載應用程式」對話方塊、「檔案」頁籤 (「選項」對話方塊)、使用 Express Tools、關於 AutoCAD Express Tools、關於安全性及病毒防護、修復惡意程式碼的攻擊、SECURELOAD (系統變數)、load (AutoLISP)(英文)
常見問題
Q:AutoCAD 的 LISP 是什麼?.lsp、.fas、.vlx 有什麼不同?
LISP 指 AutoLISP,是 AutoCAD 內建的程式語言,載入 LISP 檔就會多出新的指令。.lsp 是原始碼文字檔,可以用文字編輯器打開;.fas 是單一 LSP 檔編譯成的二進位檔;.vlx 是一個或多個 LSP 與 DCL(對話方塊)檔編譯成的集合,只有 Windows 版支援。三種都可以用 APPLOAD 載入。
Q:為什麼 LISP 每次開新圖都要重新載入?
用 APPLOAD 或拖曳載入時,只對目前開啟的圖面有效。要每次啟動 AutoCAD 都自動載入,把檔案加入 APPLOAD 的「啟動套件」;部門多人共用時,可以在支援檔搜尋路徑放一個 acaddoc.lsp,每張圖開啟時都會載入(AutoCAD LT 是 acadltdoc.lsp)。
Q:acad.lsp 和 acaddoc.lsp 有什麼不同?
acad.lsp 預設只在 AutoCAD 啟動時載入一次,裡面定義的函數與變數只能在第一張圖使用;acaddoc.lsp 每次新建或開啟圖面都會載入,每張圖都能用。ACADLSPASDOC 系統變數設為 1 時,acad.lsp 也會隨每張圖重新載入。兩個檔案 AutoCAD 都沒有附,要自己建立並放在支援檔搜尋路徑裡;AutoCAD LT 對應的檔名是 acadlt.lsp 和 acadltdoc.lsp。
Q:LISP 加入啟動套件,為什麼沒有自動載入?
加入「啟動套件」的檔案必須放在「可信任的位置」裡的資料夾(TRUSTEDPATHS 系統變數)。到「選項」→「檔案」→「可信任的位置」加入檔案所在的資料夾,重新啟動 AutoCAD 後再試。
Q:載入成功了,輸入指令卻顯示「不明的指令」?
先確認輸入的名稱和程式定義的指令名稱相同:用文字編輯器打開 LSP 檔,找 defun c: 後面的名稱,那才是要輸入的指令。另外也確認指令行在載入時沒有出現錯誤訊息。
Q:acad.lsp、acaddoc.lsp 中毒怎麼辦?
Autodesk 說明的一般步驟是:先用防毒軟體掃描;用 /safemode 指令行切換啟動 AutoCAD(這時 Express Tools 和大多數指令無法使用);找出並移除惡意程式碼、修復受影響的檔案;把 SECURELOAD 設為 1 或 2、TRUSTEDPATHS 設為專用的唯讀資料夾;最後從啟動參數移除 /safemode。平常讓 LEGACYCODESEARCH 保持 0,AutoCAD 就不會從圖面所在的資料夾找這類檔案來載入。
Q:LISP 載入之後可以卸載嗎?
不行,「載入/卸載應用程式」對話方塊無法卸載 LISP 應用程式。用 APPLOAD 或拖曳載入的只對當時那張圖有效;不想再自動載入的話,從「啟動套件」或 acaddoc.lsp 裡移除那個檔案。