2013-07-18 49 views
8

我想使用Vim來查看history(不在shell中)的結果。我認爲history | vim將工作(使用的history結果爲vim輸入),但它返回:爲什麼「history | vim」不起作用?

$history | vim 
Vim: Warning: Input is not from a terminal 
Vim: Error reading input, exiting... 

Vim: Finished. 

任何人能解釋一下嗎?

+1

如果你想使用vim作爲尋呼機[vimpager](https://github.com/rkitover/vimpager)似乎工作得很好。 – FDinoff

回答

23

通過管道進入vim,您正在更改標準輸入流。因爲vim是一個交互式程序,它需要標準輸入作爲控制檯。

如果你想查看VIM,你應該告訴它,你正在閱讀從標準輸入文件(通過提供參數-):

history | vim - 

或者,你可以只使用

history | more 
history | less 

這些後兩者是優選的。如果你輸入vim,它會看到你的「文件」有修改,所以你不能用直接的:q命令退出。相反,你必須強制退出:q!,這有點笨重。

在另一方面,你可以只需鍵入q退出。看看這兩個程序的手冊頁。你會用很多。


正如意見建議羅素·席爾瓦,您可以在只讀模式,當你從標準輸入讀取打開VIM。只需提供-R參數。然後你就可以正常退出,而無需倍率:

history | vim -R - 
+0

我嘗試過'vim |歷史也......這似乎是一件可怕的事情..結果是外殼不響應..我不能輸入任何說明..你能解釋這個給我嗎? – Sayakiss

+3

哦,親愛的。你所做的是將'vim'的輸出連接到'history'的輸入。這不是一個好主意。請記住,'vim'仍然在運行,因爲它是一個交互式程序。您仍然可以發送命令,因爲它仍在從標準輸入讀取數據,但由於您將輸出管道輸送到另一個程序中,因此您無法看到它。如果你輸入':q!'並按下回車鍵,你應該返回到shell。如果您已進入其他編輯模式,您可能需要按幾次Esc鍵。 – paddy

+0

哇......當我輸入':q!'並按下回車鍵時,我會返回到shell ...它的工作原理..真的非常感謝〜 – Sayakiss

1

除此之外的vim -,您可以嘗試bash命令替換,如:

vim <(history) 

參見:

+1

+1。我喜歡這個解決方案(也在Ubuntu上成功測試過,因爲「vi」實際上是一個到/ usr/bin/vim.tiny的符號鏈接)。儘管如此,爲什麼你會爲此付出一些代價呢?人們有時會很殘酷。 :) – syntaxerror

-1

這happend我試圖把它發送到使用背景控制檯(&)

一個腳本:

... 
vi "$file" & 
... 
# change to just: 

vi "$file" 

去除&,問題就走了。

+1

這是不相關的問題... –