2012-12-19 26 views
1

我.zshrc文件包含zsh中:無法^ q或 -M-Q結合在vi模式

bindkey -v 

我試圖結合^ q或\ -M-Q推線,例如線

bindkey "^q" push-line 

但由於某種原因它不工作。

運行`綁定密鑰-v」確認

"^Q" push-line 

但它實際上並沒有做任何事情。其他控制映射(如^ r)工作正常。

我可以成功將「push-line」映射到「\ eq」,但我不喜歡這種行爲。首先,我從來沒有使用esc-類型的綁定,其次這樣做將它綁定到控制,元和逃脫,這是過度殺傷。 (順便說一句,它不應該像`bindkey -m'那樣綁定所有這些東西嗎?我從來沒有在.zshrc中設置過它)

所以,有人知道這裏發生了什麼?

回答

2

這些快捷方式使用Software flow control (wikipedia)

Ctrl+SCtrl+Q用於停止和恢復程序的輸出。

要嘗試:
運行while (true) ; do echo $RANDOM ; sleep 1 ; done
Ctrl+S,輸出停止。
Ctrl+Q,輸出恢復。
(我不知道程序停止像Ctrl+Z,我認爲這是由於缺乏輸出的卡住。Ctrl+C殺程序。)

這些快捷鍵接管你的快捷方式,但是如果禁用此流控制功能,它可以工作。
您可以瞭解如何在How to unfreeze after accidentally pressing Ctrl-S in a terminal? - Unix and Linux中禁用它。
試試吧,告訴我們。

+0

如果使用Ctrl-z暫停程序,則可以使用「fg」命令繼續執行。 –

+0

此外,我應該能夠綁定元-q,因爲據我所知,根本沒有元綁定(至少在我的系統上),但這也行不通。而且,我會重申,「\ eq」一次綁定escape-e,meta-q和ctrl-q - 而ctrl-q在這種情況下工作,無需禁用流量控制。 –

+0

我綁定了「^ Q行尾」,它沒有工作,我運行了'stty -ixon',然後使用emacs或vi模式工作了快捷方式。 (我通常使用emacs模式)。所以我不確定我能否重現你的問題。嘗試更多,並在'man zshzle'中尋找信息,或者給出精確的命令來嘗試,我可以告訴你發生了什麼。我使用zsh 4.3.10,而你呢? – lolesque