Double Commander 原生未提供「在對側視窗以新分頁開啟目前項目」的單一指令。為了達成流暢的雙面板操作體驗,我們可以利用其內建的 Lua 腳本引擎,搭配快捷鍵設定,建立一套自動判斷左右面板與檔案類型的無縫操作流程。

建立 Lua 腳本
請在 Double Commander 的安裝目錄下 (建議建立一個 scripts 資料夾) 建立一個純文字檔案,命名為 open_in_other_panel_tab.lua,並寫入以下程式碼。
此腳本利用原生剪貼簿暫存機制取得路徑,並具備自動還原剪貼簿資料與判斷檔案類型的功能。
--[[
Double Commander 腳本:在對側面板以新分頁開啟目前項目
此版本採用原生剪貼簿暫存機制,並支援自動判斷檔案或資料夾
--]]
-- 1. 備份目前的剪貼簿內容,避免覆蓋使用者的日常資料
local old_clip = Clipbrd.GetAsText()
-- 2. 執行內建指令,將目前游標所在項目的完整路徑複製到剪貼簿
DC.ExecuteCommand("cm_CopyFullNamesToClip")
local target_path = Clipbrd.GetAsText()
-- 3. 立即復原剪貼簿內容 (若原先為空則寫入空字串)
if old_clip ~= nil then
Clipbrd.SetAsText(old_clip)
else
Clipbrd.SetAsText("")
end
-- 4. 判斷是否有成功取得路徑
if target_path and target_path ~= "" then
-- 若同時選取多個項目,剪貼簿會有多行,此處只擷取第一行的路徑並過濾換行符號
local first_path = string.match(target_path, "([^\r\n]+)")
if first_path and first_path ~= "" then
-- 設定預設目標目錄為取得的路徑
local target_dir = first_path
-- 判斷該路徑是否為資料夾 (利用內建 SysUtils 模組檢查)
if SysUtils.DirectoryExists(first_path) == false then
-- 若不是資料夾 (即為檔案),擷取最後一個斜線前的所有字元取得父資料夾路徑
target_dir = string.match(first_path, "(.*)[\\/]") or first_path
end
-- 記錄原本作用中的面板 (0 代表左邊面板,1 代表右邊面板)
local original_panel = DC.CurrentPanel()
-- 自動判定對側目標面板
local target_panel_id = (original_panel == 0) and 1 or 0
-- 切換至對側面板
DC.CurrentPanel(target_panel_id)
-- 在目標面板建立一個新分頁
DC.ExecuteCommand("cm_NewTab")
-- 將該新分頁的目錄變更為目標路徑
DC.ExecuteCommand("cm_ChangeDir", target_dir)
-- 將焦點還原回原本的來源面板
DC.CurrentPanel(original_panel)
end
end
設定快捷鍵
腳本準備好後,需至 Double Commander 內綁定快捷鍵。設定過程中一律使用系統變數 %COMMANDER_PATH% 來指定路徑,確保設定檔具備可攜性。
- 開啟 Double Commander,點選上方選單的 設定 (Configuration) -> 選項 (Options)。
- 在左側清單切換至 熱鍵 (Hot keys)。
- 在右側的 Filter 欄位輸入
cm_ExecuteScript並選取該指令。 - 點選右下角的 Add hotkey 新增快捷鍵,並在鍵盤按下
Ctrl + Right。 - 在下方的 參數 (Parameters) 欄位填入:
%COMMANDER_PATH%\scripts\open_in_other_panel_tab.lua - 再次點選 Add hotkey 新增第二個快捷鍵,按下
Ctrl + Left。 - 在 參數 (Parameters) 欄位填入完全相同的路徑:
%COMMANDER_PATH%\scripts\open_in_other_panel_tab.lua - 點選 套用 (Apply) 與 確定 (OK) 完成設定。
參數欄位切勿加上引號或任何外部變數參數,系統會自動透過腳本內部邏輯判定當前面板方向。
跨平台相容性:Ubuntu (Linux) 系統的設定調整
如果您是在 Ubuntu 或其他 Linux 發行版上使用 Double Commander,在設定快捷鍵時,必須特別注意路徑分隔符號的差異。Linux 系統嚴格要求使用正斜線 /。
請將上述參數欄位中的反斜線更改為正斜線:
%COMMANDER_PATH%/scripts/open_in_other_panel_tab.lua
建議:由於 Windows 系統也能順利識別正斜線
/,若您會跨平台共用設定檔 (shortcuts.scf),強烈建議一律統一使用正斜線,以徹底避免切換系統時產生的路徑報錯。
常見問題與解決方式
開發與設定此功能時,可能會遇到以下狀況:
錯誤:找不到檔案或腳本執行失敗
- 原因:在快捷鍵的參數欄位中,若輸入了如
%"0%p0 right這類的變數與字串,Double Commander 的cm_ExecuteScript會將整串文字含空格視為一個「檔案名稱」,進而導致找不到該 Lua 檔案。 - 解決方式:移除參數欄位的所有外部變數,僅保留單純的腳本路徑,改由 Lua 腳本自行擷取路徑與判斷左右面板。
錯誤:按下快捷鍵後毫無反應 (靜默崩潰)
- 原因:若在 Lua 腳本中呼叫了不相容或不存在的內部指令 (例如誤用 Total Commander 專屬的
cm_SaveSelectionToFile),腳本會在背景中斷且不顯示錯誤視窗。 - 解決方式:改用 Double Commander 原生支援的
cm_CopyFullNamesToClip指令,並搭配 Lua 的Clipbrd模組來處理路徑暫存與還原。
錯誤:變更目錄到檔案路徑失敗
- 原因:當游標停留在「檔案」而非「資料夾」時,系統執行開新分頁後,嘗試使用
cm_ChangeDir進入該檔案,由於不符合資料夾格式而產生錯誤警告。 - 解決方式:在 Lua 腳本內加入
SysUtils.DirectoryExists判斷邏輯。若是檔案,則透過字串正規表達式擷取其父資料夾路徑後,再執行變更目錄動作。
錯誤:Ubuntu 系統下出現「File “…” not found」
- 原因:若您直接匯入 Windows 的設定檔,或是複製貼上帶有反斜線
\的路徑 (例如/usr/lib/doublecmd\scripts\open_in_other_panel_tab.lua),Linux 系統會將整串包含反斜線的字元視為一個怪異的檔案名稱,導致無法正確解析目錄。 - 解決方式:進入熱鍵設定,將參數路徑中的反斜線
\全數替換為正斜線/即可。
錯誤:Ubuntu 系統下出現「Problem loading Lua library file “liblua5.1.so.0”」
- 原因:Windows 版本的 Double Commander 通常內建 Lua 執行環境,但在 Linux 環境下,您需要手動安裝並補齊這個相依的動態連結函式庫。
- 解決方式:
- 開啟終端機 (Terminal),執行以下指令安裝所需套件:
sudo apt update
sudo apt install liblua5.1-0
- 安裝完成後重新測試快捷鍵。若系統仍跳出「Do you want to configure Lua library location?」的提示,請點選 是 (Y)。
- 在彈出的檔案選擇視窗中,導覽至
/usr/lib/x86_64-linux-gnu/目錄,找到並選取liblua5.1.so.0檔案即可完成綁定。
結論
透過結合 Double Commander 的 Lua 腳本控制引擎與剪貼簿模組,可以完美繞過預設指令不足與快捷鍵參數解析的限制。這個自動化腳本不僅解決了單向面板設定繁瑣的問題,也確保了日常複製操作的資料不受干擾。不論游標目前指在檔案還是資料夾上,只需直覺地按下 Ctrl 加上左右方向鍵,即可實現高效的雙面板目錄導航與分頁管理。加上完善的跨平台路徑設定與函式庫補齊,這套流程在 Windows 與 Ubuntu 上皆能流暢運行。
