I'm most often finding myself having to work with plain old vi on minimalistic terminals that tend to act differently than the vim on big distros, and so the behavior trips me up.
What I want to know is not how to move to the last character in the line, but one character past that. Because typing $
does NOT move the insertion cursor to the last character in the line, and this is easily proven. I'm using vi on MSYS right now.
If I type in the line
This is a test
and hit esc
, $
, i
, and <enter>
, I will get the following:
This is a tes
t
This shows that the insertion cursor was not put at the end of the line, but one to the left of the last character in the line (Imagine the box being a line like in Notepad++. The box is over the top of the letter, signifying that the character will be inserted in the area that makes up the box's left side), and I know this because if it were really at the end ("end" meaning to the RIGHT of the last character) the last character would not be moved to its own line such as what you see above.
I don't want this behavior. It's too much a pain for me to type one extra character every time I press enter just to ensure I don't have to retype my words. This kills my productivity.
How do I fix this? Is it a setting I can tweak in .exrc
?
In short press the Esc key and then press Shift + G to move cursor to end of file in vi or vim text editor under Linux and Unix-like systems.
Press ^ to move the cursor to the start of the current line. Press $ to move the cursor to the end of the current line.
Press e (“end”) to move the cursor to the last character of the current word.
The normal mode command for entering insert mode at the end of the line is A
.
More generally, i
enters insert mode before the current character so what you get is perfectly in line with what you do: $
puts the cursor on the last character and i
enters insert mode before the last character. That's what you ask Vim to do and that's what it does.
If you want to enter insert mode after the current character, the right command is a
so what you should have done instead of $i
(which can't do what you want, whether you are in vi or vim) is $a
for which there is a cool shortcut: A
.
I am guessing you want to use o
to "open" a new line. However I have provided some ways to insert text via vi
It should be noted that vi/vim's cursor sets on top of a character not between character like most editors.
i
insert text before the cursora
append text after the cursorI
insert text before the first non-blank in the lineA
append text to the end of a lineo
begin a new line below the current one and start insert modeO
begin a new line above the current one and start insert modeS
/cc
delete the current line and start insert.c{motion}
delete {motion}
and start insert mode. Read as changeC
Delete from current position to end of line and start insert modes
remove character under cursor and start insert moder
replace one characterR
start replace mode. Think of it as overwriteFor help on any of these command type :h {command}
so help on A
would be :h A
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With