파일을 열 때 사용할 수 있습니다.
$ emacs +2:9 practice.b
그러면 "practice.b" 파일의 라인 2와 해당 라인의 문자 9가 열립니다. 이미 실행 중인 Emacs에서 이렇게 점프하려면 어떻게 해야 합니까? 알아요. M-x goto-line
하지만 세미콜론을 인식하지 못합니다.
답변1
M-x goto-line
( M-g g
또는 M-g M-g
)를 사용하면 대상 라인의 시작 부분으로 이동합니다. 그런 다음 M-g | 8 RET
( M-x move-to-column 8 RET
)를 사용하여 대상 열로 이동할 수 있습니다 ( C-u 8 right
와이드 문자가 없는 경우 작동함). Emacs는 0부터 시작하여 열의 번호를 매기지만 명령줄 옵션은 +LINE:COLUMN
1부터 시작하는 열의 번호를 매기기 때문에 열 8이 됩니다 .
입력할 수 있는 Emacs 명령을 원할 경우 2:9
다음 코드 중 일부를 파일에 붙여넣어 .emacs
인수로 작성할 수 있습니다 goto-line
. 이 코드는 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)
(move-to-column column))))))
답변2
Emacs 24+의 경우 Gilles 함수가 나에게 작동하지 않았기 때문에 다른 버전의 함수를 작성했습니다(이유는 확실하지 않음).
(defun go-to-line-and-column-cond (lc-cond)
"Allow a specification of LINE:COLUMN or LINE,COLUMN instead of just COLUMN.
Just :COLUMN or ,COLUMN moves to the specified column on the current line.
LINE alone still moves to the beginning of the specified line (like LINE:0 or LINE,0).
By Default I'm bind it to M-g M-l.
The default value of the COLUMN is decrement by -1
because all compilers consider the number of COLUMN from 1 (just for copy-past)"
(interactive "sLine:Column:: ")
(let (line delim column max-lines)
(setq max-lines (count-lines (point-min) (point-max)))
(save-match-data
(string-match "^\\([0-9]*\\)\\([,:]?\\)\\([0-9]*\\)$" lc-cond)
(setq line (string-to-number (match-string 1 lc-cond)))
(setq delim (match-string 2 lc-cond))
(setq column (string-to-number (match-string 3 lc-cond)))
(if (not (equal delim "")) (if (> column 0) (setq column (1- column))))
(if (= 0 line) (setq line (line-number-at-pos)))
(if (> line max-lines) (setq line max-lines))
(goto-line line)
(move-to-column column)
(message "Marker set to line %d column %s" (line-number-at-pos) (current-column))
)))
(global-set-key (kbd "M-g M-l") 'go-to-line-and-column-cond)
답변3
노력하다 set-goal-column
( C-x C-n
)