2016-04-18 16 views
1

當我使用Vim時,我使用了相當多的:sh。有時我忘了我是否在產卵一個新的殼牌或我在其他殼牌。Vim在產生外殼時改變控制檯的顏色(Mac OS X El Caption)

我想知道我是否可以改變顏色的控制檯當我使用:sh在Vim?所以我知道這個shell是從Vim中衍生出來的。

甲圖片勝過千字: enter image description here

跨度的殼:SH在Vim中 enter image description here

+1

什麼排序的設置在你的環境中?我在ubuntu下使用vim,當使用:sh時,vim在我的環境中留下一個'VIM_RUNTIME'的副本。我的bash prompt_command使用它在我的提示中添加一個[vimsh]標籤,所以我不會忘記。 – Dave

回答

2

我通過使變量bash和使用實現這個上bash提示符,在我的~/.bashrc檢查我是否來自vim

在我~/.vimrc,我有:

" Silence shell commands, no need to press ENTER to continue 
command! -nargs=+ Silent 
\ | execute ':silent !'.<q-args> 
\ | execute ':redraw!' 

" Silently spawn a shell 
command! Bash execute 'Silent INVIM=1 bash' 
~/.bashrc

然後,我檢查是否$INVIM被定義爲1,然後我用PS1添加(Vim)我的提示。

if [ "$INVIM" == 1 ]; then 
    PS1+='(Vim)' 
fi 

編輯:

正如@戴夫在評論中提到,Vim的產卵殼的時候就已經轉儲所有環境變量。所以我們在~/.vimrc本身中定義環境變量INVIM

let $INVIM=1

那麼我們不Bash命令定義需要INVIM=1。所以可以簡化爲:

command! Bash execute 'Silent bash'

而且,現在$INVIMvimrc定義,它適用於一切,甚至可能釀出外殼任何插件。

EDIT2

vimrc顯然定義一個新的變量,也沒有必要。 Vim在生成的shell中添加了$VIMRUNTIME$VIM環境變量。這可以在shell的rc文件中用來判斷它是否是從vim內部調用的。

+0

這個工程: - )但是vim ALREADY在你的環境中轉儲環境變量,所以使用其中的一個,如果你只是運行':sh',你就不會被抓到。 – Dave

+0

我不知道那個:)。謝謝@Dave。我編輯了答案。 – ronakg

+0

@ronakg,你可以改變控制檯的顏色嗎?所以我可以記住我來自Vim :) – 1234

3

每次在另一個shell中啓動一個shell時,$SHLVL變量會遞增。

我用下面的代碼片段顯示該變量的值時,它的上面1

export PS1='...$(((SHLVL>1))&&echo $SHLVL" ")...' 

我提示的其餘部分是不相關的,但它看起來像這樣:

$SHLV

+0

這很好知道。謝謝。 – ronakg

相關問題