Setting The Goal Column In Emacs

As you move vertically from line-to-line, Emacs tries to keep the point in the same column position or as near to it as it can. Normally, that's what you want to have happen but sometimes it's convenient to have the point move to some other column on the next or previous line. You can do that with the set-goal-column command, which is bound to 【Ctrl+x Ctrl+n】.

For example, suppose you have some columnar data such as

aaa bbb ccc
ddd eee fff
ggg hhh iii

and you want to change the second column

aaa 111 ccc
ddd 222 fff
ggg 333 iii

The most direct way of doing that is to put the point on the first b, delete the bbb with 【Meta+d】, type the 111, and then move down to the next line. The problem is that the point will then be right after the last e so you have to move it to the first e, perhaps with a 【Meta+b】. An easier way is to put the point at the first b and then set the goal column with 【Ctrl+x Ctrl+n】. Then you can delete the bbb, type the 111, and move down to the next line. Now the point will be at the first e so you can just delete and type in the 222. When you're finished, you can cancel the goal column with 【Ctrl+u Ctrl+x Ctrl+n】.

The set-goal-column command is disabled by default so you will need to enable it before its first use. You can let Emacs ask you and then set it permanently or temporarily or you can enable it in your .emacs or init.el file with

(put 'set-goal-column 'disabled nil)
This entry was posted in General and tagged . Bookmark the permalink.
  • foo

    The example does not show the point
    To erase eee when the point is after the last eee you can just to Meta-Backspace

    If you want to have anything interesting you need something like that:

    aaa bbb ccc
    ddd eeeeeeee fff
    ggg hhh iii

    • jcs

      Yes, good point.