That usually happens when vi is running in a mode that doesn't understand your terminal's arrow key escape sequences.
Here's why:
-
Arrow keys don't send a single character; they send an escape sequence (for example, the Up arrow sends
ESC [ A). -
If
vi(or more commonly the very oldex/viimplementation , notvim) doesn't recognize these escape sequences, it just displays the trailing characters likeA,B,C,D(or sometimesM) instead of moving the cursor.
Common reasons
-
You're actually running
vi, notvim.Some minimal Linux/Unix systems only ship with the original BSD
vi, which lacks proper arrow key support. -
Terminal type mismatch .
If your
$TERMenvironment variable is wrong (e.g., set todumbinstead ofxterm-256color),vidoesn't know how to interpret escape sequences. -
Insert mode vs command mode.
-
In command mode, arrows usually work.
-
In insert mode , some old
viversions don't handle them and showA,B, etc.
-
Fixes
-
Use
viminstead ofvi:bashsudo apt install vim # Ubuntu/Debian sudo yum install vim # RHEL/CentOS -
Check your terminal type:
bashecho $TERMIf it says
dumb, set it properly:bashexport TERM=xterm-256color