為什麼我無法使用重定向將 Vim 的標準輸入更改為磁碟上的某個檔案?

為什麼我無法使用重定向將 Vim 的標準輸入更改為磁碟上的某個檔案?

我正在讀《UNIX 分時系統 Dennis M. Ritchie 與 Ken Thompson」論文並作為標準輸入/輸出重定向的範例,它給出了 ed 編輯器的範例:

該命令ed <script將腳本解釋為編輯器命令的檔案;因此「<script」的意思是「從…取得輸入script」。

然而,如果我使用 vim 嘗試相同的操作,我會收到一條錯誤訊息「讀取輸入時出錯」:

[m@localhost rough]$ vim t2 <t
Vim: Warning: Input is not from a terminal
Vim: Error reading input, exiting...
Vim: preserving files...
Vim: Finished.

為什麼會這樣呢?

答案1

ed並且ex行編輯器。它們具有可以由文字檔案中的行驅動的使用者介面。

vi以及它的所有克隆版本,例如 VIM全螢幕編輯器。它們的使用者介面不會將輸入和輸出視為文字檔案行。輸入是單一字元和未分組為行的字元序列。輸出是用於在視訊終端上繪圖的單一字元以及轉義和控制序列。

模型為使用者輸入/輸出因為文字檔案不會對應到互動式全螢幕 TUI 程序,更不用說映射到 GUI 程式了。

您得到的行為因程式而異。一些全螢幕 TUI 程式會識別出它們的標準輸入不是終端,併中止,就像nvi這樣。其他工具(例如 VIM)會發出警告,但會將非終端輸入檔案視為終端輸入,這對於希望將輸入視為腳本命令的人來說會產生一些奇怪的行為。還有一些,例如less,明確地為使用者介面開啟終端設備,並且不使用標準 I/O(輸入部分)。還有一些 shell,像大多數 shell(請注意,其互動使用者介面不僅僅是行模式)一樣,會下降到非互動模式。

1974 年撰寫的有關 Unix 的論文並不能很好地指導行模式使用者介面和全螢幕使用者介面之間的區別。 George Coulouris 的第一個視訊終端 Unix 編輯器可能em是在一年後出現的。未來還有 termcap、具有(它們自己的)命令列編輯功能的 shell,以及使用非圖形特殊字元的行規則預設值。

相關內容