Emacs

如何在行列指定的位置跳轉?

  • November 9, 2016

打開文件時可以使用

$ emacs +2:9 practice.b

這將在第 2 行打開文件“practice.b”,在該行打開第 9 個字元。我如何在已經執行的 Emacs 中像這樣跳躍?我知道M-x goto-line但它不辨識分號。

M-x goto-line(M-g gM-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))))))

引用自:https://unix.stackexchange.com/questions/52258