web-dev-qa-db-ja.com

Emacsのgotoファイル

Emacsにvi "gf"コマンドの代わりはありますか?つまり、実際のファイル名が実際に存在する場合は、カーソルの下にあるファイルを開こうとします。

ありがとう

48
Nir

find-file-at-point関数(これはffapにもエイリアスされます)が必要です。デフォルトではキーにバインドされていませんが、使用できます

M-x ffap

または、.emacsファイルに入れることができます。

(ffap-bindings)

これにより、通常のfind-fileキーバインディング(C-x C-fなど)の多くがffapベースのバージョンに置き換えられます。詳細については、ffap.elの解説を参照してください。

71
cjm

おかげで、それは非常にうまく機能しますが、どういうわけかvi(gf)バージョンはまだいくらか賢いです。検索パスのパス変数を調べていると思います。

私は不必要に複雑であるが私のために働く何かを作りました(Linuxでのみ)。 「locate」コマンドを使用して、カーソルの下のパスを検索します。最初に現在のファイルへの相対パスを検索することで、よりスマートにできると思います。私の悪いelispスキルをお詫びします...それはおそらくもっと良い方法で達成することができます。

.emacsを入れて、M-xgoto-fileで使用します

(defun Shell-command-to-string (command)
  "Execute Shell command COMMAND and return its output as a string."
  (with-output-to-string
    (with-current-buffer standard-output
      (call-process Shell-file-name nil t nil Shell-command-switch command))))

(defun goto-file ()
  "open file under cursor"
  (interactive)
  (find-file (Shell-command-to-string (concat "locate " (current-Word) "|head -c -1" )) ))
6
Nir