linux - working - Home/End鍵在tmux中不起作用



bash (4)

在tmux 2.0中,您可以在.tmux.conf添加以下兩行:

bind -n End send-key C-e
bind -n Home send-key C-a

https://src-bin.com

我目前正在使用tmux和xterm-256color $ TERM變量。 當在tmux下的bash中時,按home / end會插入波形符(〜)。 在tmux之外,home / end鍵工作正常。

使用cat和tput,我可以看到生成序列和預期序列之間存在不匹配:

$ cat -v # pressing home, then end
^[[1~^[[4~
$ tput khome | cat -v; echo
^[OH
$ tput kend | cat -v; echo
^[OF

為了解決這個問題,我決定將以下內容添加到我的.bashrc中:

if [[ -n "$TMUX" ]]; then
    bind '"\e[1~":"\eOH"'
    bind '"\e[4~":"\eOF"'
fi

這解決了bash的問題,但是在其他readline程序中,例如在諸如ipython之類的REPL中,它仍然為home / end插入了代字號。

為什麼這首先是一個問題呢? 當我在tmux內部與外部時,為什么生成的序列不同? 如何解決這個問題,以免在任何程序中出現問題?


Answer #1

在嘗試了其中的每一個,以及我在閱讀其他答案和文檔時看到的其他幾個,這最終在我投入的每個場景中都適用於我。 我不能為你承諾,因為每個人的情景都不同,但這就是我最終的結果。

將以下內容添加到.tmux.conf

bind-key -n Home send Escape "OH"
bind-key -n End send Escape "OF"

這是在從這篇有點相關的文章中引入相同的試驗/錯誤和邏輯之後發現的。 唯一的區別是翻譯發生的地方(在.tmux.conf ,而不是.bashrc.tmux.conf ;主要是因為我的家/終端在tmux之外正常工作)

調試

您可以使用上面的文章中引用的cat -v來調試此問題。

運行cat -v ,然後按HomeEnd鍵。 使用Ctrl + C退出。

$ cat -v

這是我tmux using zshzshbashtmux using zsh輸出的內容:

TMUX

  ~ cat -v
^[[1~^[[4~^C

zsh的

  ~ cat -v
^[[H^[[F

慶典

bash-3.2$ cat -v
^[[H^[[F

固溶

通過將tputcat -v配對,將上述示例與我們期望看到的內容進行比較:

$ tput khome | cat -v; echo
^[OH
$ tput kend | cat -v; echo
^[OF

結論

因為這個問題僅存在於tmux ,而不存在於模擬器本身中,所以我選擇在tmux配置中進行綁定更改。 通過使用與send配對的bind-key ,我們可以使用與我們想要實現翻譯的序列配對的Escape關鍵字。 從而:

bind-key -n NAME_OF_KEY send Escape SEQUENCE_GOES_HERE

此調試和解決方案過程可以應用於任何其他關鍵轉換問題。 但是,不要太瘋狂。 由於某種原因,某些鍵被映射到某些轉義序列。 注意bashzsh是如何接收^[[H Home的 ^[[H序列而不是^[OH ; 可能不建議我們在.zshrc覆蓋它,除非我們在zsh遇到這個問題。


Answer #2

所以我沒有足夠的評論意見,所以我會在這裡說出來。 我相信首選的解決方案是在~/.tmux.conf使用set -g default-terminal "screen-256color" 。 我實際上不久前有這個問題,並決定採用sumanta的解決方案:

bind -n End send-key C-e
bind -n Home send-key C-a

但是我忘記了我把它留在這裡並最終與vim有類似的問題(主頁和結尾是從寄存器複製粘貼)而不是zsh。 簡而言之,DOES會影響vim。


Answer #3

看來主要的問題是使用xterm-256color作為$ TERM。 我將$ TERM切換到屏幕256色,問題就消失了。





tmux