在文字模式終端(非圖形介面)使用 vi 或 vim 時,若啟用了滑鼠支援(set mouse=a),編輯器會嘗試連接 /dev/gpmctl(General Purpose Mouse 控制裝置)以取得滑鼠事件。若系統未執行 gpm 守護程式,該連接會無限期阻塞,導致編輯器完全卡死,無法輸入、儲存或離開。
strace 追蹤顯示卡在 connect(4, {sa_family=AF_FILE, path="/dev/gpmctl"}, ...)。.vimrc 中的 set mouse=a 在終端類型為 linux(無 X、無 gpm)時會觸發阻塞連線。編輯 ~/.vimrc:
" 註解掉或刪除下行
" set mouse=a
僅在支援滑鼠的終端(如 xterm、gnome-terminal、ssh 連線)啟用:
if &term != "linux"
set mouse=a
endif
或更通用的判斷:
if has('mouse') && &term !~# '^linux'
set mouse=a
endif
ps aux | grep vim。kill -TERM <PID>,若無效再 kill -KILL <PID>。.swp),重新編輯時選 Recover 恢復未存內容。
加上條件判斷後,vim 在純文字終端不再嘗試連接 /dev/gpmctl,徹底解決卡死問題,且在圖形終端仍保有滑鼠選取、捲動等便利功能。