【问题标题】:Linux vi arrow keys broken in insert modeLinux vi 箭头键在插入模式下损坏
【发布时间】:2009-05-01 19:55:50
【问题描述】:

我的箭头键在家中的插入模式下无法在 vi 中使用,它们只是每个插入一个换行符和一个大写字母,例如“A”。有办法解决吗?

【问题讨论】:

  • 我的意思是linux的发行版?
  • 他们离家工作吗? :-)
  • 显然,解决方案是emacs。很明显。
  • @Paul Nathan - 如果解决方案是 emacs,那么我不想知道问题是什么。

标签: linux vim vi


【解决方案1】:

我假设您使用的是 vim,因为它被标记为 Linux。试试:

:set nocompatible

(您可能希望通过添加此命令来配置您的 .vimrc。如果您的主目录中还没有一个新的 .vimrc 文件,请运行 echo $HOME 以检查主目录路径。)

【讨论】:

  • 确保使用命令vim 而不是vi 启动vi。默认情况下,vim 的大部分高级和有用功能都处于禁用状态,除非您以 vim 开头。
  • @pts - 仅在损坏的系统上。在我所有的盒子上以 vi 启动 vim 就可以了;但是,我使用了一些 CentOS 盒子来演示您所说的行为。
  • 有人可以编辑这个答案以包含它在 vimrc 中的样子吗?
  • @Stephan 将set nocompatible 添加到 .vimrc 中自己的一行
  • 在 Ubuntu 上,我通过在 vi 上安装 vim (sudo apt install vim) 解决了这个问题,在插入模式下使用箭头键可以正常工作。编辑:我现在看到下面的 Han 已经提到了这一点。
【解决方案2】:

Ubuntu 默认附带 vim-tiny,它没有 vim 的所有花里胡哨。

发送电子邮件至sudo apt-get install vim 以获取每个人都在谈论的所有有趣的功能。

【讨论】:

  • 这正是我在 mint linux 中所需要的。通过安装 vim,我仍然可以开始使用“vi”,并且现在启用了所有代码突出显示。多么棒的 linux 知识 :)
  • 这适用于我的 Raspberry Pi (Jessie Lite)。当我将外壳固定到其中时,我遇到了这个问题,但现在它已经完全解决了:-)
【解决方案3】:

:set term=builtin_ansi

为我修好了。您可以在转义模式下(哔声模式)将其粘贴到 vim 中,也可以将其添加到 ~/.vimrc 的末尾而不带前导“:”

【讨论】:

  • :set term=xterm 也可能有效,(而且更容易记住)。
  • 仅供参考 :set term=builtin_ansi 为我工作。 :set term=xterm 没有。
  • 在我的一个 Linux 机器上,我在调用 vi 之前在命令行上使用 export TERM=xterm,然后在 vim 7.2 中使用 :set term=xterm 对我有用
  • 完美运行!谢谢!
  • 这可以启用箭头键导航,但它完全杀死了终端中的所有颜色编码。
【解决方案4】:

vi 不支持插入模式下的箭头键。使用 vim。尽管您的 vi 可能只是到 vim 的链接,但它可能被配置为表现得像“原始”vi,从而禁用箭头键。直接调用vim即可。

【讨论】:

  • 虽然这不是解决方案,但它是对行为(imo)的最佳解释,明确了vivim 之间的区别。但在我的盒子上vim 打印command not found:D
  • @DanFromGermany 也许您只安装了 vi 而没有安装 vim。如果你想使用它,请尝试通过你的 Linux 系统的包管理器安装 vim。
  • :set term=ansi 为我工作,谢谢Raz。你说它'不支持'。我想知道您是否这么说是因为 vim-tiny ubuntu 包 - 我正在使用 - 与原版 vi 不同,或者术语设置也可以在其中起作用?
【解决方案5】:

另一个变体:在一些 .vimrc 更改后,这个问题出现在我身上。一致的搜索最终表明,我在正常模式下巧妙地重新映射 ESC 并不是一个好主意。删除它解决了问题:

" this is NOT something you want in .vimrc:
" In normal mode, hitting Esc turns off search highlights:
nmap <ESC> :nohl<CR>  " Do NOT add this to .vimrc

【讨论】:

  • 我在遇到这个问题后尝试了所有方法,这就是我想要的,谢谢!
  • 感谢修复,我到处找。知道为什么重新映射逃逸会导致问题吗?
【解决方案6】:

唯一对我有用的是 ":set term=ansi"

【讨论】:

  • 这似乎对我使用 Docker 容器也有效。
  • 这个也对我有用。我在 Windows 中使用 cmd.exe 并使用 vagrant 进入 ubuntu
  • @CodeCodeO-1-O-log-n 那么您在 Windows 或 ubuntu 端使用 vi 的哪一边? :)
  • 在 Windows 上,我运行 cmd.exe,然后 vagrant ssh 进入 ubuntu 服务器,然后 vi 进入服务器。但后来我开始使用 Putty,我不需要再这样做了,Putty 对我来说很好用。
  • 我已经尝试了所有三种解决方案,这是唯一对我有用的解决方案:set nocompatible set term=ansi set noesckeys
【解决方案7】:

我在使用箭头键时遇到了同样的问题,但是当我使用设置 nocp 或 nocompatible 时,我的退格键无法正常工作

由于某种原因,当我安装 vim 时 sudo apt-get install vim,vi 不再有任何箭头或退格的问题

【讨论】:

    【解决方案8】:

    我只是在切换到在 .vim 中使用 git 后遇到了箭头键问题。

    我已经安装了这个 repo - https://github.com/sunaku/.vim

    挖了一个小时后,我发现了 AutoClose 插件 (反正不喜欢)弄坏了方向键。

    插件文档建议应该设置 set ttimeoutlen=100,但是 那对我不起作用! (使用 urxvt+screen 或 urxvt,甚至是 xterm)

    所以我最后删除了插件。

    【讨论】:

      【解决方案9】:

      在 VS Code 上的 WSL 集成终端中,更新包并安装为我工作的完整 vim 包。

      sudo apt-get update
      sudo apt-get install vim
      

      但是,要在我使用 conemu 时使箭头键起作用,我必须在 ~/.vimrc 上添加 :set term=builtin_ansi

      echo ':set term=builtin_ansi' >> ~/.vimrc
      

      【讨论】:

        【解决方案10】:

        您可能还想尝试“noesckeys”

        【讨论】:

          【解决方案11】:

          我在带有 Cygwin 的 Windows 8.1 中使用 vim 时遇到了同样的问题。

          对我有用的解决方案是,只需在 Cygwin 终端中运行以下命令:

          cp vimrc_example.vim ~/.vimrc
          

          【讨论】:

            【解决方案12】:

            在命令行中这样写:

            EXINIT="set nocompatible"; export EXINIT
            

            【讨论】:

            • 请为您的解决方案添加一些(简短)描述
            猜你喜欢
            • 2012-06-15
            • 1970-01-01
            • 1970-01-01
            • 2011-11-30
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-10-26
            • 2021-02-28
            相关资源
            最近更新 更多