求分享实现指定Emacs文件打开功能的Dotfile配置方案
Emacs Command-Line File Position Handling
Hey there, I've been using exactly this setup for ages to handle those exact command-line file opening scenarios—works like a charm. Here's the configuration you can add to your init.el (or whatever your main Emacs config file is):
(defun my/parse-file-with-position (arg) "Parse a file argument that may include line and column numbers (e.g., file:line, file:line:col, file:line:col:)." (let* ((parts (split-string arg ":")) (file (car parts)) (line (when (nth 1 parts) (string-to-number (nth 1 parts)))) (col (when (nth 2 parts) (string-to-number (nth 2 parts))))) ;; Create the file if it doesn't exist (unless (file-exists-p file) (with-temp-file file)) ;; Open the target file (find-file file) ;; Jump to specified line if provided (when line (goto-line line) ;; Jump to specified column if provided (when col (move-to-column col))))) (defun my/command-line-handle-file-positions () "Process command-line arguments that include file path + line/column positions." (let ((remaining-args command-line-args-left) processed-args) (while remaining-args (let ((current-arg (car remaining-args))) ;; Match patterns like file:line, file:line:col, file:line:col: (if (string-match "^.+:[0-9]\\(:[0-9]\\(:\\)?\\)?$" current-arg) (progn (my/parse-file-with-position current-arg) (setq remaining-args (cdr remaining-args))) (push current-arg processed-args) (setq remaining-args (cdr remaining-args))))) ;; Pass unprocessed args back to Emacs for default handling (setq command-line-args-left (reverse processed-args)))) ;; Hook our handler into Emacs' command-line processing (add-hook 'command-line-functions #'my/command-line-handle-file-positions)
How It Works
Let's break down what this does for each of your use cases:
emacs /path/to/file: Opens the file normally; if the path doesn't exist, it creates an empty file at that location before opening.emacs /path/to/file:15: Opens the file and jumps directly to line 15.emacs /path/to/file:15:16: Opens the file, jumps to line 15, then moves to column 16.emacs /path/to.file:15:16:: The trailing colon gets ignored during parsing—still jumps to line 15, column 16 just like the previous case.
This setup leaves all other command-line arguments (like -nw for terminal mode, or other flags) untouched, so it won't interfere with your normal Emacs usage.
内容的提问来源于stack exchange,提问作者blackball
相关产品推荐
相关产品推荐

