2012-03-27 98 views
5

在vim中,輸入:sh會切換到shell,而exit可以退出shell並返回到vim。有沒有任何命令來檢查它是否處於vim shell模式?這樣我就不會無意中再次打開同一個文件。我想避免如下情況:如何檢查它是否仍然處於Vim shell模式

vim myfile > :sh > exit > vim myfile //獲取另外一個Vim實例的警告編輯同一個文件

這些都屬於正常情況:
vim myfile > :sh > exit //繼續編輯
vim myfile > :wq > vim myfile //繼續編輯

回答

3

除了@ a3nm答案,你可以做的是

  1. 使用pstree -h:它會與當前分支輸出進程樹highligted和所有你需要的是檢查是否有亮點活力。
  2. 另一種可能性是ps t:它將顯示使用當前終端的所有進程,並且當您在:sh之內時,應該在列表中顯示vimps -oargs t可能會更有用,如果你想知道你運行vim的參數。

這些方法更可靠,因爲VIMRUNTIMEVIMMYVIMRC環境變量可以通過你爲了做一些定製(順便說一句,他們是由VIM定義用於在vimscripts,而不是由:sh)來overrided。它們也適用於允許您運行子shell的其他進程,但不定義任何環境變量。

我也建議考慮在正常模式下使用<C-z>或在Ex中使用:suspend/:stop,因爲這些使用shell vim是從啓動而不是創建新的。這種行爲使您可以訪問運行vim之前鍵入的命令的歷史記錄,還可以讓您無需等待每次都能編寫更復雜,更耗時的shell配置。

如果您在使用<C-z>這兩種方法仍然可以工作,但第一種方法將不突出VIM因爲這將是在同一級別(同一父)爲pstree本身,可能只是在圖形下方或上方pstree。這也使第三種方法:jobs殼內置。

爲了從<C-z>恢復你應該(在的zsh和bash也可用於單一%),這是少類型,然後exit(但更多的則<C-d>)使用fg

3

vim中的:sh命令似乎定義了VIMRUNTIME,VIMMYVIMRC環境變量,因此您可以檢查它們是否已定義。爲此,您可以運行echo $VIM,例如,它應該在一個正常shell中返回一個空行,並且在從vim運行的shell中返回/usr/share/vim