开发者

Arrow keys type capital letters instead of moving the cursor

I've installed the latest vim using homebrew and also installed mac-vim from the google code homepage. in m开发者_JS百科ac-vim everything works fine. but when I run vim in terminal.app in mac and go to insert mode I'll get A B C D for arrow keys which is extremely annoying.

I googled it and tried all the solutions but nothing is working for me!

it gets intresting when I run vim with vim -u NONE -U NONE -N then the arrow keys start to function normally in insert mode.

my vimrc files are a clone of janus (from carlhuda)

do you have the same problem in terminal? is there a way to fix it in terminal.app?


Just create an empty ".vimrc file in the home directory of the remote machine. It started working fine for me.

touch ~/.vimrc


You need to set no compatible mode in the vim Try following command in normal mode

:set nocompatible


This works for me:

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

To type the sequence for each arrow key, you need to press ctrl-v, then the arrow key.

For example, to type the first line:
m, a, p, space, ctrl-v, , space, <, u, p, >

This also might work:

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

More information is available here.


I'm on a MacBook Pro with OSx El Captain (version 10.11.1) and was having the same problem after updating my Vim with Homebrew.

My Vim version is 7.4.1063.

I was having the problem with the Terminal app as well as the iTerm app (build 2.1.4).

To solve this problem, I followed some of the instructions in the previous answers from @devsathish and @Kailash. The steps I followed were:

1 - Create a .vimrc file with touch ~/.vimrc
2 - Add the following to it:

set nocompatible
set backspace=indent,eol,start

Now the arrow keys and the delete/backspace keys work as expected. I didn't have to change my $TERM env variable as suggested in some of the previous answers.

I hope this helps others with the same problem.


I'm using iTerm2 with spf13-vim, and have same problem today.

It caused by removing plugin vim-autoclose. This solution fixed it.

Just add following lines into your .vimrc

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


This is usually caused by the wrong $TERM environment variable. Not sure which ones are supported on your system but you can try with "linux" or "vt320":

export TERM=linux


None of the above worked for me. Running vim in blank state with vim -u NONE -U NONE -N made it work ok, and because I had not installed any plugins, I knew problem is in my vimrc. So I started commenting out sections from it, and at one moment problem disappeared.

The culprit was this line: inoremap

Even though it was recommended in a very well written course (http://learnvimscriptthehardway.stevelosh.com/chapters/10.html), it broke the arrow keys on Mac OS X 10.10. Basically, you shouldn't overwrite esc, as the other SO answer explains: How to disable Esc and cursor keys in vim


To make sure that my Terminal is working great with Vim 7.3 in Show Leopard, I have done the following:

  1. Installed the latest Vim via Homebrew.
  2. Set path to enable the latest Vim. E.g.: export PATH=/usr/local/bin:$PATH
  3. Added export TERM=linux to my .bashrc file.
  4. Created a .vimrc file with some options (formerly linked here, link went dead.)

When so is done, everything should work. However, I have experienced that some text don't seem to remove, like its protected until I either dd or x. Has anyone experienced something similar? Also, please share comments on my small guide above.


I have used following code in my .vimrc file, and it has resolved my problem with arrow keys.

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

I have posted my complete .vimrc file Here. Hope it helps !


This is what worked for me (based on initial solution from @Phoenix above)

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

for each ^[
type the sequence press ctrl-v, then ESC


I've had a similar problem with another plugin. I solved it by hardcoding these alternative mappings in the script itself, the first line of each pair was problematic, the second line is the fix:

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

^[ is obtained by hitting <C-v><Esc>.

Maybe you can try something like:

map <Right> ^[OC


I actually resolved this on OS X Mavericks (10.9) by removing set noesckeys from ~/.vimrc


I've run into this problem as well. It has multiple causes, but one of them is vim using vi rather than vim behavior by default. Surprisingly, this can be triggered by the location of your vimrc file.

For example, if you delete your .vimrc from your home directory and move the contents to the system-wide vimrc file, vim will start using vi defaults. With the Mac Terminal, this will give you ABCD from arrows in insert mode. Add "set nocompatible" to the system-wide vimrc, which will force vim to use vim defaults, and the arrows will work again.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜