AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 419068
Accepted
Gunee
Gunee
Asked: 2018-01-24 04:58:58 +0800 CST2018-01-24 04:58:58 +0800 CST 2018-01-24 04:58:58 +0800 CST

使用腻子,左右键将光标移动一个单词,而不是一个字符

  • 772

几天来,我一直在寻找解决此OhMyZSH!问题的方法,但找不到解决方案。诚然,我不明白zle真正的工作原理,对于bindkey. 终端仿真器发送“控制序列”的方式以及“终端类型”的含义(xterm、 vsxterm-256-color等)也是如此。与“应用程序模式”相同

设置

我有 2 台机器安装了最新版本的 OhMyZSH,提交c3b072:

  • 机器 A:SLES 11 SP4,正在运行zsh 4.3.6 (x86_64-suse-linux-gnu)
  • 机器 B:Ubuntu 16.04,正在运行zsh 5.1.1 (x86_64-ubuntu-linux-gnu)

我使用在 Windows 上运行的 Putty 连接到任何一台机器,终端类型xterm为 UTF-8 翻译模式。

我的zshrc文件几乎是香草OhMyZSH模板,我刚刚将提示更改为dieter机器 A 上的提示,以及机器 B 上的powerlevel-9k[ https://github.com/bhilburn/powerlevel9k] 。

我在机器 A 上观察到的(又名“坏”机器)

当我编辑命令行时,光标键Left和Right光标键移动一个完整的单词(而不是 1 个单个字符)。

Home和End键,将光标移动到行的开头和结尾,正如预期的那样。

此描述的行为适用于emacs模式 ( bindkey -e)。

当我进入vim模式 ( bindkey -v) 时,LeftandRight箭头移动 1 个字符,但HomeandEnd键不会将光标移动到行首和行尾。相反,它们会切换光标下字符的大小写。

我在机器 B 上观察到的(又名“好”机器)

Left和Right键将光标移动一个字符。Home 和 end 键将光标分别移动到行首和行尾。Ctrl+A和Ctrl+E组合将我的光标分别带到开头和结尾。

这是我希望所有 shell 的行为。

到目前为止我发现了什么

我认为这是一个bindkey问题。但我对此几乎一无所知,而且我很难找到关于这个zsh内置的任何文档。

zsh -v尽管文件相似,但在登录时在两台机器上运行会产生非常不同的结果.zshrc。

有人可以向我解释是什么导致这 2 台机器的行为如此不同,以及如何更改我的配置以恢复一致性,并且我所有的 shell 的行为都像机器 B 上的一样(又名“好”的那个)?

如果您需要更多我不知道需要的信息,我相信您会告诉我。

非常感谢

zsh oh-my-zsh
  • 2 2 个回答
  • 2107 Views

2 个回答

  • Voted
  1. Best Answer
    JdeBP
    2018-01-24T06:11:37+08:002018-01-24T06:11:37+08:00

    使用 PuTTY 时,您必须将终端类型配置为putty、putty-256color或。putty-sco它们是 terminfo 数据库中的条目正确描述 PuTTY的唯一终端类型。

    一个普遍的错误假设是终端仿真器都与 XTerm 兼容,并且 terminfo 数据库中的xterm和xterm-256color条目正确地描述了它们。

    这种错误想法在 Thomas Dickey 的 XTerm FAQ 中被指出,值得注意的是xterm和xterm-256color条目甚至没有描述 XTerm 的所有版本,更不用说其他终端仿真器了。

    PuTTY 的文档,例如 M. Dickey 在那里超链接的页面,即使是在将条目添加到 terminfo 16 年后的putty今天,不幸的是,它促进了对xterm终端类型的这种误用,但它是一种误用,这就是那种发生的应用程序不当行为。

    比较 terminfo 数据库条目xterm-256color并putty-256color揭示您的⇱ Home和⇲ End密钥发生了什么:

    % infocmp xterm-256color putty-256color|grep -F kend
        肯德:'\EOF','\E[4~'。
    % infocmp xterm-256color putty-256color|grep -F khome
        khome: '\EOH', '\E[1~'。
    %

    如您所见,被告知它正在处理 XTerm 的应用程序期望(从终端)接收键的控制序列␛OH和键⇱ Home的控制序列␛OF。⇲ End但 PuTTY 实际上发送控制序列␛[1~和␛[4~(分别)代替。

    您的应用程序 Z shell 期待 XTerm 键盘控制序列(因为您错误地告诉它您的终端具有 type xterm),但无法识别 PuTTY 控制序列,实际上将它们分解为vi-mode 命令以退出插入模式 ( ␛) 并交换当前字符的大小写 ( ~)。

    进一步阅读

    • TERM 环境变量默认值在哪里设置?
    • 鱼壳在提示符中显示深灰色“⎔字符
    • https://unix.stackexchange.com/a/444270/5132
    • 2
  2. Gunee
    2018-01-26T01:59:47+08:002018-01-26T01:59:47+08:00

    正如 JdeBP 所指出的那样,我TERM的设置错误。

    我终于能够通过以下步骤使一切工作一致:

    1. 在 Putty 中设置终端类型为putty
    2. 在 Putty 中停用光标和键盘的应用程序模式
    3. 将以下行添加到我的.tmux.conf文件中
      • set -g default-terminal "$TERM"防止 tmuxscreen默认使用
      • set -g terminal-overrides "putty*:kLFT5=\eOD:kRIT5=\eOC:kUP5=\eOA:kDN5=\eOB:smkx@:rmkx@"让LeftandRight键移动一个字符,而不是一个单词
    • 1

相关问题

  • 列出没有其他后缀文件的文件

  • 什么情况下路径中最先找到的可执行文件不会被使用

  • 符号链接所有点文件和目录

  • 如何在`zsh`中增加一个动态命名的变量

  • 为什么我不能在 zsh 中定义一个名为 path 的只读变量?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    ssh 无法协商:“找不到匹配的密码”,正在拒绝 cbc

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    如何卸载内核模块“nvidia-drm”?

    • 13 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Wong Jia Hau ssh-add 返回:“连接代理时出错:没有这样的文件或目录” 2018-08-24 23:28:13 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST
  • Martin Hope
    Bagas Sanjaya 为什么 Linux 使用 LF 作为换行符? 2017-12-20 05:48:21 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve