Zsh

zsh 中的文本插入綁定

  • March 4, 2017

在 zsh 中,我如何綁定(比如說)c-<cr>插入&>/dev/null &<cr>點?

我使用 urxvt。

有兩個步驟:您需要讓終端仿真器為Ctrl+發出不同的轉義序列Return,並且您需要告訴 zsh 在鍵入該轉義序列時要做什麼。

終端中的應用程序接收字節序列,其中大部分要麼形成可列印字元,要麼是控製字元。大多數功能鍵和鍵弦都需要編碼為轉義序列,該轉義序列由轉義字元後跟一些編碼按下哪個鍵弦的字元組成。請參閱鍵盤輸入和文本輸出如何工作?了解更多背景資訊。Ctrl+沒有標準的轉義序列Return,大多數終端,包括 (U)rxvt,只是發送一個 CR 字元,就像一個 plain Return。所以你需要告訴 Urxvt 發送一個不同的轉義序列。在您的 X 資源文件(~/.Xresources–load it with xrdb -merge ~/.Xresources)中,添加

URxvt.keysym.C-Return: \033[27;5;13~

在 zsh 中,要將自定義程式碼綁定到一個鍵,將該程式碼編寫在一個函式中,並將該函式聲明為帶有zle -N. 在使用者定義的小元件中,變數BUFFER包含正在編輯的行的內容,並CURSOR包含游標位置。要在游標周圍插入文本,還有更方便的變數:您可以追加文本以LBUFFER將其插入游標之前,或者將文本添加到將其RBUFFER插入游標之後。

我認為您想要做的是在行尾添加文本並執行目前命令。執行目前命令不是通過插入一個 CR 字元來完成的,它只會在命令中插入一個 CR。呼叫小元件accept-line(預設綁定到 CR)來執行命令。

accept-line-run-in-background-with-output-hidden () {
 BUFFER+=" &>/dev/null &"
 zle accept-line
}
zle -N accept-line-run-in-background-with-output-hidden
bindkey $'\033[27;5;13~' accept-line-run-in-background-with-output-hidden

引用自:https://unix.stackexchange.com/questions/349085