1408

I know how to generally move around in command mode, specifically, jumping to lines, etc. But what is the command to jump to the end of the line that I am currently on?

Vincent Scheib
  • 17,142
  • 9
  • 61
  • 77
salt.racer
  • 21,903
  • 14
  • 44
  • 51

15 Answers15

2410

Just the $ (dollar sign) key. You can use A to move to the end of the line and switch to editing mode (Append). To jump to the last non-blank character, you can press g then _ keys.

The opposite of A is I (Insert mode at beginning of line), as an aside. Pressing just the ^ will place your cursor at the first non-white-space character of the line.

robertspierre
  • 3,218
  • 2
  • 31
  • 46
dvorak
  • 31,281
  • 4
  • 27
  • 29
352

As lots of people have said:

  • $ gets you to the end of the line

but also:

  • ^ or _ gets you to the first non-whitespace character in the line, and
  • 0 (zero) gets you to the beginning of the line incl. whitespace
SimTae
  • 86
  • 6
Rob Wells
  • 36,220
  • 13
  • 81
  • 146
  • 1
    I knew | gets us to the beginning of the line but I was not aware of 0. So both 0 and | do exactly the same thing, yeah? – Kamran Bigdely May 18 '11 at 20:23
  • 9
    @kami: whilst the descriptions are different they do appear to behave identically. However the pipe `|` command can take a count, e.g. 3| to jump to the third column. – Paul Ruane Nov 21 '11 at 21:57
  • wow, just learn that _ does the same thing as ^ – gruvw Oct 05 '22 at 21:39
151
  • $ moves to the last character on the line.
  • g _ goes to the last non-whitespace character.

  • g $ goes to the end of the screen line (when a buffer line is wrapped across multiple screen lines)

Paul Ruane
  • 37,459
  • 12
  • 63
  • 82
  • I feel like g_ is the same thing as $b – Dave Aaron Smith Mar 28 '12 at 21:21
  • 4
    @DaveAaronSmith: `b` goes to the beginning of the previous word which is not the same thing at all. It's roughly equivalent to `$ge`. – Paul Ruane Mar 29 '12 at 08:23
  • 9
    I use ```_``` and ```g_``` for visual/yanking, as ```$``` will also copy/delete the new line (LN) character. – Ernest May 08 '14 at 13:08
  • For me, $ goes to the end of the current screen line (when wrapped). I haven't managed to figure out why. `g_` is the only way I found to get to the actual end of the line. – ezuk Jan 21 '15 at 10:07
  • @ezuk `$` goes to the end of the line even when wrapped for me. I know of no setting to adjust its behaviour. Perhaps it's been remapped by your .vimrc to `g$`? – Paul Ruane Jan 21 '15 at 10:51
  • @PaulRuane- You nailed it. I use spf13, and .vimrc line 310 maps it. Now the question becomes how do I unmap it later in the load chain (just changing this line will be overwritten next time I pull spf13). – ezuk Jan 21 '15 at 12:00
  • I figured it out. I had to add `let g:spf13_no_wrapRelMotion = 1` to my `.vimrc.before.local` file to disable this behaviour, which is specific to spf13. – ezuk Jan 21 '15 at 12:07
  • I like to `nnoremap L g_` and `nnoremap L L`, also in operator pending and visual modes. More intuitive and less of a stretch. – jazzabeanie Feb 07 '17 at 02:57
  • is `_` same as `^` for first non-blank character at the beginning of the line? –  Feb 26 '17 at 10:45
91

The main question - end of line

$ goes to the end of line, remains in command mode

A goes to the end of line, switches to insert mode

Conversely - start of line (technically the first non-whitespace character)

^ goes to the start of line, remains in command mode

I (uppercase i) goes to the start of line, switches to insert mode

Further - start of line (technically the first column irrespective of whitespace)

0 (zero) goes to the start of line, remains in command mode

0i (zero followed by lowercase i) goes the start of line, switches to insert mode

For those starting to learn vi, here is a good introduction to vi by listing side by side vi commands to typical Windows GUI Editor cursor movement and shortcut keys.

vi editor for Windows users

ap-osd
  • 2,624
  • 16
  • 16
49

If your current line wraps around the visible screen onto the next line, you can use g$ to get to the end of the screen line.

Commodore Jaeger
  • 32,280
  • 4
  • 54
  • 44
  • 4
    I just discovered pre-pending the up and down commands with *g* make vim move the cursor screen-based, rather than line-based. I.e. *gj* and *gk* allow you to move up and down on a long line. Really useful. – Druckles Apr 11 '12 at 17:29
  • 1
    Also discovered that typing gw and something seems to change *j* and *k* permanently to behave like this. Not sure how or why. Can anyone explain this? – Druckles Apr 11 '12 at 17:30
  • 4
    @Druckles: A bit of a late reply, but if you're still wondering, (or if anyone else reading this is) `gw` and `gq` are commands that reformat text. (see `:h gw` and `:h gq`) What probably happened was you did `gw{motion}` and changed some text so that the screen lines corresponded to the actual lines. – Pandu Jul 14 '13 at 18:50
48

I can't see the hotkey for a MacBook for using Vim in the standard terminal.

For macOS users (tested on a MacBook Pro 2018):

fn + - move to the beginning of the line

fn + - move to the end of the line

fn + - move a page up

fn + - move a page down

fn + g - move the cursor to the beginning of the document

fn + shift + g - move the cursor to the end of the document

For the last two commands, it sometimes needs to be tapped twice.

Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
Olexander Yushko
  • 2,434
  • 16
  • 16
22

The dollar sign: $

David Singer
  • 1,172
  • 1
  • 10
  • 11
18

Press A to enter edit mode starting at the end of the line.

Vidura Mudalige
  • 810
  • 2
  • 18
  • 31
Brian
  • 5,826
  • 11
  • 60
  • 82
15

The advantage of the 'End' key is it works in both normal and insert modes.

'$' works in normal/command mode only but it also works in the classic vi editor (good to know when vim is not available).

Diastrophism
  • 15,139
  • 1
  • 16
  • 7
14

Also note the distinction between line (or perhaps physical line) and screen line. A line is terminated by the End Of Line character ("\n"). A screen line is whatever happens to be shown as one row of characters in your terminal or in your screen. The two come apart if you have physical lines longer than the screen width, which is very common when writing emails and such.

The distinction shows up in the end-of-line commands as well.

  • $ and 0 move to the end or beginning of the physical line or paragraph, respectively:
  • g$ and g0 move to the end or beginning of the screen line or paragraph, respectively.

If you always prefer the latter behavior, you can remap the keys like this:

:noremap 0 g0
:noremap $ g$
sudo bangbang
  • 27,127
  • 11
  • 75
  • 77
loevborg
  • 1,774
  • 13
  • 18
13

In many cases, when we are inside a string we are enclosed by a double quote, or while writing a statement we don't want to press escape and go to end of that line with arrow key and press the semicolon(;) just to end the line. Write the following line inside your vimrc file:

imap <C-l> <Esc>$a

What does the line say? It maps Ctrl+l to a series of commands. It is equivalent to you pressing Esc (command mode), $ (end of line), a (append) at once.

kenorb
  • 155,785
  • 88
  • 678
  • 743
Pramod
  • 806
  • 1
  • 8
  • 10
  • thank you for that one. I have been wanting to add Ctrl-e back to my vim as go to end of line like on my first machine and didnt know how – tristanbailey Apr 27 '12 at 14:36
  • 1
    As the accepted answer says, you can press A to do the same thing. – trysis Jul 15 '15 at 21:34
  • 4
    @trysis you misunderstood, this doesn't move away from editing mode which is quite nice. – Marconi Oct 15 '15 at 10:38
  • 2
    You're right. `vim` certainly allows you to do much more in much less time with things like this. @razorxpress, a minor adjustment would be `imap A`, which makes Ctrl+l the equivalent of pressing `Esc` (exit insert mode), then `A` (append to end of line). – trysis Oct 15 '15 at 15:22
  • 3
    I think the more idiomatic way to map this would be `inoremap A` – bennyty May 02 '17 at 19:40
  • I fail to understand how two key presses (`Ctrl+l`) is better than ...two keystrokes which come inbuilt (`A`). – hundredrab Jun 24 '20 at 09:07
9

Or there's the obvious answer: use the End key to go to the end of the line.

Vidura Mudalige
  • 810
  • 2
  • 18
  • 31
davr
  • 18,877
  • 17
  • 76
  • 99
  • 2
    Yeah, mac terminal is one I've noticed that hijacks keys and doesn't pass them along to the stuff running inside terminal. One of the things that annoy me whenever I use a mac for a bit. – davr Aug 31 '11 at 23:57
  • 1
    The whole point of using vim is not having to use keys like 'End'. Never leave home row. – Jon Thoroddsen Jan 07 '15 at 14:12
  • 10
    On Mac there is no End key. – kenorb May 05 '15 at 14:24
  • 1
    @kenorb There was when I posted the comment...but Apple likes to remove features over the years. https://netdna.webdesignerdepot.com/uploads/2009/01/appleprokeyboard.jpg this is actually one of my favorite keyboards of all time – davr Apr 23 '17 at 02:21
  • @JonThoroddsen it was much easier to not leave home row when Esc on terminals was not placed so far away. – qwr Feb 21 '22 at 01:07
  • @kenorb: There is on the [AEKII](https://en.wikipedia.org/wiki/Apple_Extended_Keyboard) (though the legend is not literally "End", like for [PgUp](https://en.wikipedia.org/wiki/Page_Up_and_Page_Down_keys) and [PgDn](https://en.wikipedia.org/wiki/Page_Up_and_Page_Down_keys)). – Peter Mortensen Aug 19 '23 at 20:17
  • Yes, this is perfectly fine for casual use. Especially on non-American keyboard layouts (no need to use modifier keys). – Peter Mortensen Aug 25 '23 at 17:41
7

Possibly unrelated, but if you want to start a new line after the current line, you can use O anywhere in the line.

Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
graywh
  • 9,640
  • 2
  • 29
  • 27
3

The easiest option would be to key in $. If you are working with blocks of text, you might appreciate the command { and } in order to move a paragraph back and forward, respectively.

sudo bangbang
  • 27,127
  • 11
  • 75
  • 77
panza
  • 1,341
  • 7
  • 38
  • 68
2

I was used to Home and End getting me to the start and end of lines in insert mode (from use in Windows and I think Linux), which Mac doesn't support.

This is particularly annoying because when I'm using Vim on a remote system, I also can't easily do it. After some painful trial and error, I came up with these .vimrc lines which do the same thing, but bound to Ctrl + A for the start of the line and Ctrl + D for the end of the line. (For some reason, Ctrl + E I guess is reserved or at least I couldn't figure a way to bind it.) Enjoy.

:imap <Char-1> <Char-15>:normal 0<Char-13>
:imap <Char-4> <Char-15>:normal $<Char-13>

There's a good chart here for the ASCII control character codes here for others as well:

ASCII Table

You can also do Ctrl + V, + Ctrl + <Letter> you want to bind or execute as well, but that doesn't paste as well to places like this.

Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
Marcus
  • 2,128
  • 20
  • 22