Vi

vi編輯器的奇怪關閉

  • February 11, 2015

關閉vi編輯器後,(不讓它載入整個文件),

-bash-3.2$ vi /var/spool/mail/user1
-bash-3.2$ 0;136;0c

留下0;136;0c提示,是什麼導致了這種情況,不讓vi載入內容或它是什麼?

有幾件事讓我無法明確說出原因是什麼:首先,我不知道您使用的是 ,vim還是heirloom 。我不知道的第二件事是你是如何關閉的,但我會猜測一下。vile``nvi``vi``vi

據我所知,所有vi程序都使用轉義序列來控制螢幕上顯示的內容。也就是說,不是使用視窗系統呼叫來定位游標和寫入文本,而是使用viTERM 環境變數的值來找出它必須輸出到哪種終端。根據 TERM 的值,它發送特殊的字節序列,通常或總是以 0x1b、ASCII“ESC”或轉義字元開頭。特殊字節被稱為“轉義序列”。

在過去,串列終端的硬體會做一些特殊的事情,比如移動游標,或者改變文本顏色或字型,或者畫線,或者根據這些轉義序列更改為不同的字元集。vi據我所知,仍然使用它們。整個轉義序列已被抽象為一個名為“curses”或“ncurses”的庫,C 程序可以使用該庫。

我的猜測是,當您關閉時vi(可能是通過控制-C 或控制-反斜杠),您vi正好在輸出一些轉義序列的中間。您看到的是該轉義序列的最後幾個字節。它顯示出來是因為實際的 ASCII“ESC”字節從未得到輸出,或者在 control-C 之前得到輸出,並且終端將 control-C 解釋為轉義序列的一部分。終端認為它解釋的任何轉義序列都比字節序列vi輸出的短,您會看到預期轉義序列的剩​​餘部分。

引用自:https://unix.stackexchange.com/questions/184237