Take the 2-minute tour ×
Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems.. It's 100% free, no registration required.

When opening a file one can use

$ emacs +2:9 practice.b

Which will open file ‘practice.b’ on line 2 and character 9 on that line. How do I jump like this in an already running Emacs? I know about M-x goto-line but it doesn’t recognize semicolon.

share|improve this question

1 Answer 1

up vote 3 down vote accepted

M-x goto-line (M-g g or M-g M-g) gets you to the beginning of the target line. Then you can use C-u 8 right to move to the target column. Note that this puts you in column 8, because Emacs numbers columns from 0, except that the command line option +LINE:COLUMN numbers columns from 1.

If you want an Emacs command where you can type 2:9, here's some code you can paste in your .emacs that allows you to write it as an argument to goto-line. Note that the code is only minimally tested in Emacs 23.

(defadvice goto-line (around goto-column activate)
  "Allow a specification of LINE:COLUMN instead of just COLUMN.
Just :COLUMN moves to the specified column on the current line.
Just LINE: moves to the current column on the specified line.
LINE alone still moves to the beginning of the specified line (like LINE:0)."
  (if (symbolp line) (setq line (symbol-name line)))
  (let ((column (save-match-data
                  (if (and (stringp line)
                           (string-match "\\`\\([0-9]*\\):\\([0-9]*\\)\\'" line))
                      (prog1
                        (match-string 2 line)
                        (setq line (match-string 1 line)))
                    nil))))
    (if (stringp column)
        (setq column (if (= (length column) 0)
                         (current-column)
                       (string-to-int column))))
    (if (stringp line)
        (setq line (if (= (length line) 0)
                       (if buffer
                         (save-excursion
                           (set-buffer buffer)
                           (line-number-at-pos))
                         nil)
                     (string-to-int line))))
    (if line
        ad-do-it)
    (if column
        (let ((limit (- (save-excursion (forward-line 1) (point))
                        (point))))
          (when (< column limit)
            (beginning-of-line)
            (forward-char column))))))
share|improve this answer
    
Thanks, it works! –  tijagi Oct 19 '12 at 11:37

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.