箭头键键入大写字母而不是移动光标

时间:2010-11-29 12:47:19

标签: macos terminal vim

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

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

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

我的vimrc文件是janus (from carlhuda)

的克隆

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

13 个答案:

答案 0 :(得分:44)

只需在远程计算机的主目录中创建一个空的" .vimrc文件即可。它开始对我很好。

touch ~/.vimrc

答案 1 :(得分:20)

您需要在vim中不设置兼容模式 在正常模式下尝试以下命令

:set nocompatible

答案 2 :(得分:11)

这对我有用:

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

要为每个箭头键输入序列,您需要按 ctrl - v ,然后按箭头键。

例如,键入第一行:
m a p space ctrl - v < / kbd>, space &lt; u p &GT;

这也可行:

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

More information is available here.

答案 3 :(得分:9)

我在MacBook Pro上使用OSx El Captain(版本10.11.1),在用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变量。

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

答案 4 :(得分:7)

我将iTerm2与spf13-vim一起使用,今天遇到同样的问题。

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

只需在.vimrc中添加以下行

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

答案 5 :(得分:6)

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

导出TERM = linux

答案 6 :(得分:4)

为了确保我的终端在Show Leopard中与Vim 7.3配合使用,我做了以下工作:

  1. 通过Homebrew安装了最新的Vim。
  2. 设置路径以启用最新的Vim。例如:export PATH=/usr/local/bin:$PATH
  3. export TERM=linux添加到我的.bashrc文件中。
  4. 创建了一个带有一些选项的.vimrc文件(以前链接在这里,链接已经死了。)
  5. 一旦完成,一切都应该有效。但是,我经历过一些文字似乎没有被移除,就像它受到保护一样,直到我ddx。有没有人经历类似的事情?另外,请在上面的小指南上分享评论。

答案 7 :(得分:3)

以上都不适合我。使用vim -u NONE -U NONE -N在空白状态下运行vim使其工作正常,并且由于我没有安装任何插件,我知道问题出在我的vimrc中。所以我开始评论它的部分,一时间问题就消失了。

罪魁祸首是这条线: inoremap

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

答案 8 :(得分:2)

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

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

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

答案 9 :(得分:2)

我在.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。希望它有所帮助!

答案 10 :(得分:1)

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

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>"

^[是通过点击<C-v><Esc>获得的。

也许你可以尝试类似的东西:

map <Right> ^[OC

答案 11 :(得分:1)

我通过从set noesckeys移除~/.vimrc

,实际上在OS X Mavericks(10.9)上解决了这个问题

答案 12 :(得分:0)

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

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