如何在Emacs中缩写路径?

时间:2013-09-26 15:17:22

标签: emacs path

我想在emacs中缩写路径。

emacs的标准行为是:C-x C-f然后排版文件的完整名称。 E.g。

C-x C-f ~/latex/project/style/test.sty

可以用来快速完成路径。

由于我经常使用三个目录中的两个,我想知道是否可以给出一些“缩写路径”。 E.g。

C-x C-f lstyle/test.sty

在«~/latex/project/style/test.sty»

中自动展开

感谢您的帮助!

7 个答案:

答案 0 :(得分:3)

尚未提及的东西,但只是另一个机会(在香草Emacs中,不需要使用Helm或IDO)。你可以使用书签。特别是打开文件你会 Cx rm - 创建一个书签(系统会提示你输入一个名字给书签),然后 Cx rb 会调用那个书签(将提示您输入之前给书签的名称。)

如果您主要使用路径是打开文件,这将为您节省一些打字,但如果您需要将其作为文本插入,那么它将不会替换缩写。

如果你不知道,也许还有一件事。在 C-x C-f 之后输入路径后,您可以使用:

  1. Cx Cf Mp Mn ,用于浏览您打开和关闭的文件的历史记录。

  2. Cx Cf Mr 通过提供正则表达式来搜索历史记录(虽然有一个缺点,但你不会看到它将要进行的匹配键入正则表达式时。

答案 1 :(得分:2)

实现这一目标的最佳方法是使用缩写。他们是简短的话 在键入时扩展为任何东西(因此扩展将发生为 一旦你点击“/”或空格或一些标点符号)。

将以下内容添加到 您的~/.emacs文件或~/.emacs.d/init.el文件(我更喜欢第二个):

(setq-default abbrev-mode t)
(define-abbrev global-abbrev-table "lstyle" "~/latex/project/style")

然后试一试,在任何地方键入“lstyle /”,它会扩展 到“〜/ latex / project / style”。

答案 2 :(得分:2)

使用标准选项directory-abbrev-alist。从文档字符串:

Alist of abbreviations for file directories.
A list of elements of the form (FROM . TO), each meaning to replace
FROM with TO when it appears in a directory name.  This replacement is
done when setting up the default directory of a newly visited file.

FROM is matched against directory names anchored at the first
character, so it should start with a "\\`", or, if directory
names cannot have embedded newlines, with a "^".

FROM and TO should be equivalent names, which refer to the
same directory.  Do not use `~' in the TO strings;
they should be ordinary absolute directory names.

Use this feature when you have directories which you normally refer to
via absolute symbolic links.  Make TO the name of the link, and FROM
the name it is linked to.

答案 3 :(得分:1)

不完全符合您的要求,但您可以使用recentf模式和ido模式快速访问最近打开的文件。将此代码放在初始化文件中:

;; ido-mode
(ido-mode t)

;; recent mode
(recentf-mode 1)

;; define a function to use recentf from ido
(defun recentf-ido-find-file ()
  "Open a recent file using IDO mode"
  (interactive)
  (let ((file (ido-completing-read "Recent file: " recentf-list nil t)))
    (when file
      (find-file file))))

(global-set-key (kbd "C-c f") 'recentf-ido-find-file)

然后,您可以按C-c f来快速打开最近的文件。

答案 4 :(得分:0)

对于类似的事情,有几种解决方案。事先很难说你会更喜欢哪一个。

一种流行的方法是使用ido(参见herehere),其他是掌舵。

答案 5 :(得分:0)

在寻找同一问题的答案时,我找到了following example

(define-abbrev-table 'my-abbrev-table
  '(("xy" "/path/to/the/directory")))

(add-hook
 'minibuffer-setup-hook
 (lambda ()
   (abbrev-mode 1)
   (setq local-abbrev-table my-abbrev-table)))

(defadvice minibuffer-complete
  (before my-minibuffer-complete activate)
  (expand-abbrev))

;; If you use partial-completion-mode
(defadvice PC-do-completion
  (before my-PC-do-completion activate)
  (expand-abbrev))

答案 6 :(得分:0)

使用this答案作为参考:

(global-set-key (kbd "<f5>") 'lawlist-bookmark)

(defun lawlist-bookmark (choice)
  "Choices for directories and files."
  (interactive "c[d]ropbox | [b]oxsync")
    (cond
     ((eq choice ?d)
      (interactive)
      (counsel-find-file "C:/Users/acer/Dropbox/"))
     ((eq choice ?b)
      (counsel-find-file "C:/Users/acer/Box Sync/"))
     (t (message "Quit"))))

此处使用counsel-find-file而非find-file来允许在迷你缓冲区中进行交互式浏览。