vim tmux 退格键 ^?

vim tmux 退格键 ^?

我遇到了一个奇怪的问题:

当 ssh 进入特定主机(从 OSX 到 RHEL5)时,vim 似乎忘记了如何退格,但仅限于 tmux 会话中,即:

  ssh [email protected]
  vim test

上面的退格键可以正常工作。

然而,这并没有:

  ssh [email protected]
  tmux
  vim test

在插入模式下按退格键会出现 ^?这可能是什么问题?

答案1

您可能需要更改终端以^h在您键入时发送Backspace

在终端的首选项中,该设置是配置文件的一部分,因此您可以为与该 RHEL5 系统的 SSH 连接设置专用配置文件。

答案2

您可以将退格键映射到您需要的键,就像 Kevin 所说的那样。看起来您需要将其映射到 ^?(而不是 ^H)

为此,请使用以下命令:

stty erase "^?"

这可以添加到您的启动脚本(.login.tcshrc.bashrc,或其他文件,取决于您使用的 shell)。

答案3

为了修复 Apple M1 Pro OSX 12.4 上的退格键,我必须这样做

$(brew --prefix)/opt/ncurses/bin/infocmp tmux-256color > ~/tmux-256color.info
tic -xe tmux-256color ~/tmux-256color.info

问题:

https://github.com/tmux/tmux/issues/1257#issuecomment-581378716

https://gist.github.com/bbqtd/a4ac060d6f6b9ea6fe3aabe735aa9d95

答案4

我做了一个解决方法

  1. 在中创建别名.alias

    alias emacs(or vi)='stty erase "^H"
    
    emacs'  
    
  2. 编写 shell 脚本

    # filename tmuxsh
    
    stty ek
    cmd=$(which tmux)      # tmux path
    session=$1
    if [ $# = 0 ]; then
       $cmd ls
       exit 0
    fi
    $cmd has -t $session 2> /dev/null
    if [ $? != 0 ]; then
         $cmd new -s $session
         exit 0
    fi
    $cmd att -t $session
    exit 0
    

当然,您也可以创建一个别名, alias tm=tmuxsh然后您就可以在 tmux 中或 tmux 外很好地使用 emacs/vi。

为什么在步骤 1 中创建 emacs 别名?因为如果只使用步骤 2,退出 tmux 到正常 shell 后,emacs/vi 也会遇到此问题。

这对我来说很有效。

相关内容