2013-01-14 53 views
5

我是一個vim用戶,最近剛開始玩zsh能夠在shell中使用vi模式(由於缺少插入/命令,這在bash中不實用模式指示器)。讀了一些例子,我設置了以下功能更新相應的線(我選擇了色彩方案,以配合VIM電力線,這也是我使用):zsh清除RPS1之前添加線到線緩衝區

vim_ins_mode="%{$fg[white]%}%{$fg_bold[blue]$bg[white]%} INSERT %{$reset_color%}" 
vim_cmd_mode="%{$fg[green]%}%{$fg_bold[black]$bg[green]%} COMMAND %{$reset_color%}" 
vim_mode=$vim_ins_mode 
function zle-line-init zle-keymap-select { 
    RPS1="${${KEYMAP/vicmd/${vim_cmd_mode}}/(main|viins)/${vim_ins_mode}}" 
    RPS2=$RPS1 
    zle reset-prompt 
} 
zle -N zle-line-init 
zle -N zle-keymap-select 

它的偉大工程,只是因爲我運行更命令,先前命令中的RPS1將輸出到屏幕。你可以想像,有遍佈我的終端多明亮的箱子可以得到相當分散: here is an example

我希望以某種方式清除此字段,然後纔會慢慢倒入linebuffer爲前面的命令,但到目前爲止,無論是例子也沒有zsh主題我看着麻煩做這個。在我舊的.bashrc文件中,我有一個陷阱設置來重置我的命令的顏色,以便輸出顏色不受影響,我想知道在這裏可能有類似的東西嗎?或者也許有一個更清潔的方式與zsh?

回答

9

試試下面的代碼:

function _-accept-line() 
{ 
    emulate -L zsh 
    local SAVEDRPS1="$RPS1" 
    RPS1="" 
    zle reset-prompt 
    RPS1="$SAVEDRPS1" 
    zle .accept-line 
} 
zle -N accept-line _-accept-line 

忘記這段代碼。巖組有你想要的行爲的選項:

setopt transientrprompt 

接受命令行時,從顯示器中取出任何權利的提示。這對於其他剪切/粘貼方法的終端可能很有用。

+0

完美的,正是我想要的,並且比陷入困境要乾淨得多 –

+1

@AlexanderTsepkov關於這個選項的有趣之處在於我總是把它放在'.zshrc'中。但它不是默認的,所以用'zsh -f'測試你的代碼就會顯示你的行爲。而且這是你不會注意到的小便利之一,直到他們被刪除,所以我沒有記住我實際上沒有上述代碼所要求的行爲。 – ZyX