【问题标题】:How to have special/accented characters support in IntelliJ terminal如何在 IntelliJ 终端中支持特殊/重音字符
【发布时间】:2017-01-24 11:57:29
【问题描述】:

我经常使用IntelliJ IDEA's Embedded Local Terminal,但有一件事让我抓狂:特殊字符和重音字符不起作用。 这是应该但不起作用的:

  • HOME 键转到行首:什么都不做
  • END 键转到行尾:什么都不做
  • [CTRL + 左箭头] 转到上一个单词:打印 D
  • [CTRL + 右箭头] 转到下一个单词:打印 C
  • 所有重音字符:一开始不打印,然后当我按下另一个键时?

可能还有其他组合应该但不起作用......但这些是最烦人的。

我正在使用:

  • 在 Windows 10 主机上运行的 Ubuntu 16.04 虚拟机客户机
  • IntelliJ IDEA 2016.2.4
  • zsh
  • oh-my-zsh

重要提示:

  • 在 GNU 终端(当时在 IntelliJ 之外)中一切正常,所以我不认为“在 VM 中运行”是问题的根源。
  • 如果我运行 bash 而不是 zsh 特殊字符正在工作(家庭、结束、下一个工作等),但我仍然没有对重音字符的适当支持(打印 �),而且我'我真的更喜欢使用 zsh。
  • showkey --scancodes 打印 Couldn't get a file descriptor referring to the console
  • 如果我启动od -c,我会得到^[[H 的HOME 键和^[[F 的END 键
  • showkey --ascii 也可以为 HOME 键工作和打印 ^[[H

我已经做了什么:

  • 检查TERM 变量在.zshrc 中未被覆盖
  • 在.zshrc 中添加bindkey "${terminfo[khome]}" beginning-of-line 和行尾等效项
  • 在 .inputrc 中为readline 添加行(看起来合适)(好吧,我现在看到这是没用的,因为 Zsh 不使用 readline)

编辑:我可以使 home/end 键工作(请参阅下面接受的答案),但不能使 CTRL+LEFT 和 CTRL+RIGHT 键(用于前进字和后退字)。经过更多的挖掘,这似乎是 IntelliJ 不能 100% 正确模拟终端的问题。 4

这里有一个问题,来自 oh-my-zsh 贡献者的有趣输入:https://youtrack.jetbrains.com/issue/IDEA-118848#comment=27-1292473

他们考虑很快从 oh-my-zsh 中放弃 smkx(这似乎是问题的根源)。我检查了this PR,现在我的键工作正常(仍然需要绑定,但 CTRL+LEFT 和 CTRL+RIGHT 现在可以了)


编辑:IntelliJ 现在正确支持重音/特殊字符(yeehaa !),请确保至少具有以下版本:IntelliJ IDEA 2016.3.1, Build #IC-163.9166.29, built on December 9, 2016

【问题讨论】:

  • 你的 ~/.zshrc 中的 TERM 变量是否被覆盖?
  • 不,它没有被覆盖
  • 好的,如果强制扫描码不起作用,我认为下一步是检查读取线从 IntelliJ 终端中获取的键码。您能否运行showkey --scancodes,然后按Home 并将输出粘贴到您的问题中?
  • @AshutoshJindal:完成:showkeys 失败。非常感谢您的帮助!
  • 我可以在与您相同的 OSX (10.10.x) 和 Intellij Idea 版本上重现此问题。我知道您正在使用 zsh,但是请您检查以下内容。将 IntelliJ 中的终端更改为 bash(首选项 -> 终端 -> /bin/bash 或等效项)并重现问题。然后尝试编辑 ~/.inputrc 并添加以下内容:"\e[H": beginning-of-line 和 "\e[F": end-of-line 然后检查这是否解决了 bash 的问题(它对我有用)。我正在尝试隔离问题(这似乎是 zsh config 和 Intellij 的组合)。

标签: intellij-idea zsh zsh-zle


【解决方案1】:

我很欣赏 zsh 在 IntelliJ 之外也能正常工作。

步骤 1

在 Intellij 中找到终端使用的正确键码。这取决于您使用的操作系统。对于 OSX 和 Linux od -c 然后按下按键将导致按键代码被发出。

第二步

获得密钥后,修改您的~/.zshrc:

bindkey "$HOME_KEY_CODE_FROM_STEP_1" beginning-of-line
bindkey "$END_KEY_CODE_FROM_STEP_1" end-of-line

例如(就像 OP 一样):

bindkey "^[[H" beginning-of-line
bindkey "^[[F" end-of-line

然后重启终端。

【讨论】:

  • 我已经尝试过了(但现在再次尝试确定),它并没有改变任何东西。
  • 好的,我认为下一步是检查 readline 从 IntelliJ 终端中获取的键码。您能否运行showkey --scancodes,然后按Home 并将输出粘贴到您的问题中?
  • showkey --scancodes 失败,但我尝试使用 showkey --ascii 并得到 ^[[H 的 Home 键
  • 感谢您的帮助!就我而言,它是bindkey "^[[H" beginning-of-line 和bindkey "^[[F" end-of-line,我会找到其他的。也许您想使用 showkey 步骤修改您的答案以查找代码。
  • 嗯...我已经在 if 半小时了,无法使用前后单词 bindkey "^[[5D" backward-word bindkey "^[[5C" forward-word ... 与家庭相同的程序和结束键。有什么想法吗?
猜你喜欢
  • 2016-09-20
  • 1970-01-01
  • 2014-09-20
  • 2021-01-27
  • 2023-03-03
  • 2011-12-27
  • 2013-03-31
  • 2012-04-07
  • 1970-01-01
相关资源
最近更新 更多