【问题标题】:Arrow keys type capital letters instead of moving the cursor箭头键键入大写字母而不是移动光标
【发布时间】:2011-05-17 06:32:21
【问题描述】:

我已经使用 homebrew 安装了最新的 vim,并且还从 google 代码主页安装了 mac-vim。 在 mac-vim 中一切正常。但是当我在 mac 中的 terminal.app 中运行 vim 并进入插入模式时,我会得到 A B C D 箭头键,这非常烦人。

我用谷歌搜索并尝试了所有解决方案,但对我没有任何效果!

当我使用vim -u NONE -U NONE -N 运行 vim 时,它变得有趣,然后箭头键在插入模式下开始正常工作。

我的 vimrc 文件是 janus (from carlhuda) 的克隆

你在终端有同样的问题吗?有没有办法在 terminal.app 中修复它?

【问题讨论】:

  • :verb imap <down> 告诉你什么? (<down、<up>、<left> 和<right>)。
  • set nocompatible 没有帮助?
  • @Benoit i *@=22_FlushBuffer() 最后一组来自 ~/Dropbox/dotfiles/vim/plugin/autoclose.vim跨度>
  • @khachik 我已经在 vimrc 文件的顶部设置了 nocomatible
  • @Benoit 很棒的提示,谢谢。它是由 autoclose.vim 引起的。我删除了插件,一切都开始正常工作。现在我想知道如何解决这个问题并保留插件。因为它在 mac-vim 中非常方便。我更喜欢在终端中使用它

标签: macos terminal vim


【解决方案1】:

为了确保我的终端在 Show Leopard 中与 Vim 7.3 完美配合,我执行了以下操作:

  1. 通过Homebrew 安装了最新的 Vim。
  2. 设置路径以启用最新的 Vim。例如:export PATH=/usr/local/bin:$PATH
  3. 已将export TERM=linux 添加到我的.bashrc 文件中。
  4. 创建了一个带有一些选项的 .vimrc 文件(之前链接在这里,链接失效了。)

完成后,一切都应该正常工作。但是,我经历过一些文本似乎没有被删除,比如在我 dd 或 x 之前受保护。有没有人经历过类似的事情?另外,请在我上面的小指南上分享 cmets。

【讨论】:

  • 我在优胜美地,只是添加 export TERM=linux 对我有用
【解决方案2】:

我在一台装有 OSx El Captain(版本 10.11.1)的 MacBook Pro 上使用 Homebrew 更新我的 Vim 后遇到了同样的问题。

我的 Vim 版本是 7.4.1063。

我遇到了终端应用程序和 iTerm 应用程序(内部版本 2.1.4)的问题。

为了解决这个问题,我遵循了@devsathish 和@Kailash 先前答案中的一些说明。我遵循的步骤是:

1 - 使用 touch ~/.vimrc 创建一个 .vimrc 文件
2 - 添加以下内容:

set nocompatible
set backspace=indent,eol,start

现在箭头键和删除/退格键按预期工作。我不必像以前的一些答案中所建议的那样更改我的 $TERM env 变量。

我希望这可以帮助其他有同样问题的人。

【讨论】:

  • 这工作得非常好,而之前说的其他事情没有工作。非常感谢,你救了我的 Vim! ^_^
  • 很高兴帮助@DavidG。
  • 谢谢!我找到了一个帖子来解释set backspace=indent,eol,start 的工作原理。 vi.stackexchange.com/questions/2162/…
【解决方案3】:

我正在使用带有spf13-vim 的 iTerm2,今天遇到了同样的问题。

它是由删除插件 vim-autoclose 引起的。 This solution fixed it.

只需将以下几行添加到您的 .vimrc 中

if &term[:4] == "xterm" || &term[:5] == 'screen' || &term[:3] == 'rxvt'
  inoremap <silent> <C-[>OC <RIGHT>
endif

【讨论】:

  • 酷,它有效。起初我责怪一些插件,但在 iTerm 和 Terminal.app 上测试了 vim w/o .vimrc 之后,我不太确定是不是一直都是这样。
【解决方案4】:

以上都不适合我。使用vim -u NONE -U NONE -N 在空白状态下运行vim 可以正常工作,而且因为我没有安装任何插件,我知道问题出在我的vimrc 中。所以我开始注释掉其中的部分,并且有一刻问题消失了。

罪魁祸首是这一行: 地图

尽管它被推荐在一个写得很好的课程 (http://learnvimscriptthehardway.stevelosh.com/chapters/10.html) 中,但它破坏了 Mac OS X 10.10 上的箭头键。基本上,您不应该覆盖 esc,正如另一个 SO 答案所解释的那样:How to disable Esc and cursor keys in vim

【讨论】:

    【解决方案5】:

    我实际上在 OS X Mavericks (10.9) 上通过从 ~/.vimrc 中删除 set noesckeys 解决了这个问题

    【讨论】:

    • 这用 iTerm2 完美解决了我的问题。非常感谢!
    【解决方案6】:

    只需在远程机器的主目录中创建一个空的“.vimrc 文件。它开始对我来说很好。

    touch ~/.vimrc
    

    【讨论】:

    • 使用 iTerm2 在 Mavericks 10.9.2 上对我来说非常有用!谢谢:)
    • 使用 zsh 在 10.9.3 上也为我工作
    • 于 10.9.4 确认。很好的答案!
    • 这解决了箭头键的问题,但删除/退格键在带有 iTerm2 的 OSx El Captain 上不起作用。我已经发布了对我有用的解决方案的答案。还是谢谢!
    • @rodorgas 这行得通,因为当~/.vimrc 存在时,vim 会自动打开“不兼容”模式。这里有更多关于它的信息superuser.com/a/543327
    【解决方案7】:

    我在 .vimrc 文件中使用了以下代码,它解决了我的箭头键问题。

    ...
    ...
    " Use Vim settings, rather than Vi settings (much better!).
    " This must be first, because it changes other options as a side effect.
    set nocompatible
    
    " allow backspacing over everything in insert mode
    set backspace=indent,eol,start
    ...
    ...
    
    " CTRL-U in insert mode deletes a lot.  Use CTRL-G u to first break undo,
    " so that you can undo CTRL-U after inserting a line break.
    inoremap <C-U> <C-G>u<C-U>
    
    " In many terminal emulators the mouse works just fine, thus enable it.
    if has('mouse')
      set mouse=a
    endif
    ...
    ...   
    

    我已经发布了我完整的.vimrc 文件Here。希望对您有所帮助!

    【讨论】:

      【解决方案8】:

      这对我有用:

      map ^[[A <up>
      map ^[[B <down>
      map ^[[C <right>
      map ^[[D <left>
      

      要键入每个箭头键的顺序,您需要按 ctrl-v,然后按箭头键。

      例如,键入第一行:
      m、a、p、空格 , ctrl-v, ←, 空格, , u 、p、>

      这也可能有效:

      set t_ku=^[[A
      set t_kd=^[[B
      set t_kr=^[[C
      set t_kl=^[[D
      

      More information is available here.

      【讨论】:

      • 万岁!谢谢@todofixthis!我为此尝试了一大堆不同的修复;它正在使用 ctrl-v 来设置执行此操作的地图。
      【解决方案9】:

      这对我有用(基于上面@Phoenix 的初始解决方案)

      imap ^[OA <ESC>kli
      imap ^[OB <ESC>jli
      imap ^[OC <ESC>lli
      imap ^[OD <ESC>hli
      

      对于每个 ^[
      键入序列按 ctrl-v,然后按 ESC

      【讨论】:

        【解决方案10】:

        我也遇到过这个问题。它有多种原因,但其中之一是 vim 默认使用 vi 而不是 vim 行为。令人惊讶的是,这可以由您的 vimrc 文件的位置触发。

        例如,如果您从主目录中删除 .vimrc 并将其内容移动到系统范围的 vimrc 文件,vim 将开始使用 vi 默认值。使用 Mac 终端,这将在插入模式下从箭头为您提供 ABCD。在系统范围的 vimrc 中添加“set nocompatible”,这将强制 vim 使用 vim 默认值,并且箭头将再次起作用。

        【讨论】:

          【解决方案11】:

          我在使用另一个插件时遇到了类似的问题。我通过在脚本本身中硬编码这些替代映射来解决它,每对的第一行是有问题的,第二行是修复:

          VIM::command "#{map} <Right> :call <SID>#{prefix}KeyPressed(9)<CR>"
          VIM::command "#{map} ^[OC    :call <SID>#{prefix}KeyPressed(9)<CR>"
          
          VIM::command "#{map} <Left>  :call <SID>#{prefix}KeyPressed(23)<CR>"
          VIM::command "#{map} ^[OD    :call <SID>#{prefix}KeyPressed(23)<CR>"
          
          VIM::command "#{map} <Down>  :call <SID>#{prefix}KeyPressed(14)<CR>"
          VIM::command "#{map} ^[OB    :call <SID>#{prefix}KeyPressed(14)<CR>"
          
          VIM::command "#{map} <Up>    :call <SID>#{prefix}KeyPressed(16)<CR>"
          VIM::command "#{map} ^[OA    :call <SID>#{prefix}KeyPressed(16)<CR>"
          

          ^[通过点击&lt;C-v&gt;&lt;Esc&gt;获得。

          也许您可以尝试以下方法:

          map <Right> ^[OC
          

          【讨论】:

            【解决方案12】:

            你需要在vim中设置no compatible mode 在正常模式下尝试以下命令

            :set nocompatible

            【讨论】:

            • 这意味着“使用 Vim 设置而不是 Vi 设置”,对吗?
            • 是的,使用 vim 行为而不是 vi 行为
            • 你可以通过touch ~/.vimrc实现同样的目的
            【解决方案13】:

            这通常是由错误的 $TERM 环境变量引起的。不确定您的系统支持哪些,但您可以尝试使用“linux”或“vt320”:

            导出 TERM=linux

            【讨论】:

              猜你喜欢
              • 2013-01-28
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2023-03-27
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多