Emacs
如何在行列指定的位置跳轉?
打開文件時可以使用
$ emacs +2:9 practice.b
這將在第 2 行打開文件“practice.b”,在該行打開第 9 個字元。我如何在已經執行的 Emacs 中像這樣跳躍?我知道
M-x goto-line
但它不辨識分號。
M-x goto-line
(M-g g
或M-g M-g
) 將您帶到目標行的開頭。然後您可以使用C-u 8 right
移動到目標列。請注意,這會將您置於第 8 列,因為 Emacs 從 0 開始編號,除了命令行選項+LINE:COLUMN
從 1 開始編號。如果你想要一個可以鍵入的 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) (beginning-of-line) (forward-char column))))))