Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> 關於 Linux

Linux vi/vim 編輯器卡死於 connect(/dev/gpmctl) 的解決方法

編輯:關於 Linux

在文字模式終端(非圖形介面)使用 vi 或 vim 時,若啟用了滑鼠支援(set mouse=a),編輯器會嘗試連接 /dev/gpmctl(General Purpose Mouse 控制裝置)以取得滑鼠事件。若系統未執行 gpm 守護程式,該連接會無限期阻塞,導致編輯器完全卡死,無法輸入、儲存或離開。

一、現象與原因

  • 症狀:開啟檔案後游標閃爍但無法輸入,Ctrl+C、Esc 均無反應。
  • strace 追蹤顯示卡在 connect(4, {sa_family=AF_FILE, path="/dev/gpmctl"}, ...)。
  • 原因:.vimrc 中的 set mouse=a 在終端類型為 linux(無 X、無 gpm)時會觸發阻塞連線。

二、解決方法(二選一)

方法 1:註解或移除滑鼠設定

編輯 ~/.vimrc:

" 註解掉或刪除下行
" set mouse=a

方法 2:條件式啟用滑鼠(推薦)

僅在支援滑鼠的終端(如 xterm、gnome-terminal、ssh 連線)啟用:

if &term != "linux"
    set mouse=a
endif

或更通用的判斷:

if has('mouse') && &term !~# '^linux'
    set mouse=a
endif

三、臨時恢復操作(已卡死時)

  1. 另開終端(Ctrl+Alt+F2 或新視窗)。
  2. 找到卡死的 vim 進程:ps aux | grep vim。
  3. 發送 SIGTERM:kill -TERM <PID>,若無效再 kill -KILL <PID>。
  4. 若有交換檔(.swp),重新編輯時選 Recover 恢復未存內容。

vim 卡死 strace 輸出示意圖

加上條件判斷後,vim 在純文字終端不再嘗試連接 /dev/gpmctl,徹底解決卡死問題,且在圖形終端仍保有滑鼠選取、捲動等便利功能。

Copyright © Windows教程網 All Rights Reserved