When I tried to use arrow keys in insert mode in vi
editor the following characters are being inserted in the editor:
- for ↓ I get B,
- for ↑ I get A,
- for ← I get D,
- for → I get C.
Please help me in resolve this problem.
When I tried to use arrow keys in insert mode in vi
editor the following characters are being inserted in the editor:
Please help me in resolve this problem.
If you don't already have a
.vimrc
file in your home directory, create one using this:Add this line to the top of the file:
Save the file and this should fix the problem for you. :)
Installing the
vim
package will fix the problem:There are many good vim/vi tutorials on YouTube, or the web generally. For your problem, see the article 8 Essential Vim Editor Navigation Fundamentals.
Then continue to open files as usual:
With
vi
, when pressing i you activate the command to Insert text.This command allows you to insert text in your file.
And right, when:
Till you deactivate this command.
To deactivate a command in
vi
: just press EscAnd then you will get back normal use of your arrow keys:
FYI, here are some
vi
commands:From this source.
:x
Return quit vi, writing out modified file to file named in original invocation:wq
Return quit vi, writing out modified file to file named in original invocation:q
Return quit (or exit) vi:q!
Return quit vi even though latest changes have not been saved for this vi call↓ move cursor down one line
↓ move cursor up one line
← move cursor left one character
→ move cursor right one character
u
undo whatever you just did; a simple toggle.
redo whatever you just didi
insert text before cursor, until Esc hitI
insert text at beginning of current line, until Esc hita
append text after cursor, until Esc hitA
append text to end of current line, until Esc hito
open and put text in a new line below current line, until Esc hitO
open and put text in a new line above current line, until Esc hitr
replace single character under cursor (no Esc needed)cw
change the current word with new text,starting with the character under cursor, until Esc hitx
delete single character under cursorNx
delete N characters, starting with character under cursordw
delete the single word beginning with character under cursorC
change (replace) the characters in the current line, until Esc hitD
delete the remainder of the line, starting with current cursor positiondd
delete entire current lineNdd
delete N lines, beginning with the current line; e.g., 5dd deletes 5 linesyy
copy (yank, cut) the current line into the bufferNyy
copy (yank, cut) the next N lines, including the current line, into the bufferp
paste the line(s) in the buffer into the text after the current line0
(zero) move cursor to start of current line (the one with the cursor)$
move cursor to end of current linew
move cursor to beginning of next wordb
move cursor back to beginning of preceding word:0
Return or1G
move cursor to first line in file:n
Return ornG
move cursor to line n:$
Return orG
move cursor to last line in file/string
search forward for occurrence of string in text?string
search backward for occurrence of string in textn
move to next occurrence of search stringN
move to next occurrence of search string in opposite directionTo disable printing letters on pressing arrows in edit mode you can do following
(create file if it does not exist) and then add line
set nocompatible
to it and save.There are three modes in vi editor namely:
When youu open a file, you are in default mode. Now if you want to go to a specific position in your text, just use arrow keys or use h, j, k, l keys. Note that this would work only when you have not pressed i (or any other input mode entering command like a, A, I).
The reason for 'B' may be because the arrow keys in input mode don't function as arrow keys, so just press Esc to go into default mode any time. When to shift to input mode press i or a, and to navigate just press i key and use arrow keys or h, j, k, l.
I had the exact same Problem but not only on my local machine but also on connections via putty on a sles machine in a Win7 VM over a citrix receiver. Both the local host and the remote hosts show after a reinstall of Ubuntu had the exact same problem.
After finding out that
Causes this strange VI behaviour I installed the package console-data which solves the issue!
Here is an explanation:
Vi is an editor that's been around a long while, with roots back to the Unix systems. It's a good tool but it has been iterated on and now there is better. Vim was written later and is that iteration. People commonly refer to vi as 'vim-minimal' and to vim is an "improved" version of vi. You can think of it like this: vi is the core and vim expands on it.
Likely how you discovered the behavior:
In order for you to have discovered this problem, you pressed "i" to enter into insert mode and then used your arrow keys to navigate the correct line and edit point. This is what caused your unexpected char issue.
Solution 1 or 2
vi someFile
While using vi, first move to the edit point, then enter into insert mode.vim someFile
Simply use vim from the start.I cannot stress enough to read the manual (man pages) or to use -h for help. Once you adjust to the patterns in the shell, man pages become your best friend. Example:
man vi
orman vim
Validate that Vim is installed.
Open a console window and execute:
dpkg --list | grep vim
If you get something similar to this, then you can just start using vim.
If the command prompt returns with nothing, then vim is is not installed. Use the below examples to update your repositories and then install vim.
On the off chance that you use vi or vim only when searching on the internet how to fix something and you happen to forget to type
vim
, there is one way that you can fix it for the future. I caution you to pay attention. You can use an alias to overwrite vi with a reference to vim so that no matter what you type in the infrequent future, you get vim without that "oops!" moment. You can always delete an alias later.Type
vim .bashrc
. Move down to the empty line with only a~
(or to any other line that starts withalias
(so they're grouped together) and then press the i key to enter -insert- mode. On its own separate line, enter the following:Press
Esc
and then type:wq
. Now you need to reload the file. Typesource .bashrc
Any other shell that opens after you have made these edits will automatically load the .bashrc file.This can also be due to the
TERM
variable; set it for example like this:All the explanations given are a bit bizarre. I have vi but not vim installed.
Checking alternatives:
/etc/alternatives/vi
→/usr/bin/vim.tiny
So
vi
isvim.tiny
, and it uses/etc/vim/vimrc.tiny
.And in
vimrc.tiny
you find the following line:Which is almost the only thing in this file. Note that in
/etc/vim/vimrc
it is usingnocompatible
.So either install vim, or change the
vimrc.tiny
file, or create your own~/.vimrc
which should contain the line:On some systems, the
nocompatible
option is not available, or it may not fix the problem if a plugin breaks arrow key functionality. Here's a workaround...Edit the
.exrc
file to include the following lines:Or, if the problem only exists in normal mode, you can change to
nmap
and skip the followinga
, as follows:and so on.
Here's the key combinations needed to produce them (showing first one only):
This escapes edit mode, moves in the wanted direction, and reenters edit mode. This is needed to overcome Vi reading the escape sequence as a sequence of literal <ESC><O><A>, etc.
Source: https://hea-www.harvard.edu/~fine/Tech/vi.html