30

先週、R と Perl のさまざまな IDE に対処しなければならないことに (再び) 腹を立てましたが、どちらも好きではなく、快適に使用するのに十分ではありませんでした。Emacs を試してみることにしました。この決定は、私の側に一定の不安がなければなされませんでした。私の主な用途は、Perl と cperl と R と ESS です。私の環境は Windows 7 Ultimate 64 ビットで、v23.4.1 を実行しています。これは、私に代わって ESS パッケージがインストールしたものだと思います。

ほぼ 1 週間経ちましたが、これまでのところ驚くほど痛みがなく、他のどの重要なソフトウェアよりも複雑ではありません。ctrl キーを caps-lock に再マップし、デフォルト フォルダを変更し、.emacs をいじり、自動インストール、yasnippet、color-theme、icicles などをいくつか追加しました。明らかに、非常に洗練されたものがいくつかあります。さらに、基本 Emacs の特定の機能はすぐに非常に強力で便利です。全体として、私はうれしい驚きと安心を感じています。

私が予想していたよりも粗いことの 1 つは、ファイルを見つけて開くプロセスです。さまざまなチュートリアルをざっと読んだ後、準魔法のようなファイルの場所とファイル名の自動補完のイメージが浮かびました。私のセットアップのメイン ディレクトリには、g:/roaming/code/perl または g:/roaming/code/R/ のようなパスがありますが、g:/pressuredata/support files/sector/project01/ のような完全に異なるパスに分岐する必要があることがよくあります。等々。

現在、別のフォークを取得する必要がある場合は、ファイル パスを骨の折れるまで削除してから、オートコンプリートを使用して、ファイル システムのそのブランチにさらに深く移動します。20 年前に Amiga で bash シェルを実行していたときの話に戻ります。

私は何を期待していましたか?(上記の例を使用して)「project01」と入力して、パスの下部にあるフォルダーにすぐにスキップするようなものです。何らかの理由で、Emacs がディレクトリをプリロードするという考えが頭に浮かびました。だから、これは現実的ではなかったのかもしれません。

私の推測では、私の困難はおそらく、Emacs の構造的な欠点ではなく、私自身の慣れの欠如に起因するものであり、私の質問につながります。十分なドキュメントがないことに文句を言うことはできません。むしろ無計画に散らばっている情報が豊富です。つららにも同様の問題があります-どちらかといえば多すぎます。

1) ミニバッファーでファイルを開こうとするとき、または他の方法を使用するときに、ファイルツリーのさまざまなブランチを移動するための最良の戦術は何ですか? ある場所から別の場所へのショートカットに使用できるエイリアスはありますか、またはプリロードするディレクトリを指定できますか? 人々はたくさん CD を演奏しますか? それとも、私は完全に間違った角度からこれに来ており、別の戦略を採用する必要がありますか?

2) 追加の設定により、オートコンプリートを使用して、ワイルドカードなどを前に付けることで、(たとえば) すぐ上の project01 内のファイルを検索できますか? ここでより効率的になるためには、何に焦点を当てるべきですか? つららなどのアドオンの力を利用していませんか?

これらの質問は、明確な答えがないという非推奨のカテゴリーに危険なほど近づいていることに気づきました。私の弁護は、悪い習慣や貧弱な長期的な解決策に自分自身をコミットする前に、この段階でいくつかのヒント/ガイダンスを歓迎し、その答えが切り替えを検討している可能性のある他の人に役立つと思う. 問題があれば、喜んで撤回または言い換えます。

4

6 に答える 6

13

helm(以前はanything) があなたに合っているかもしれません。手動でインストールするか、auto-install拡張機能を使用してインストールできます。

途中で:それauto-installをダウンロードし、あなたに入れload-path、次に追加し.emacsます:

(add-to-list 'load-path "~/.emacs.d/site-lisp/auto-install")
(require 'auto-install)
(setq auto-install-directory "~/.emacs.d/site-lisp/auto-install/")

次に、実行しますM-x auto-install-batch anything。それが終わったら、.emacs を入れます:

(require 'anything)
(require 'anything-match-plugin)
(require 'anything-config)
(require 'anything-show-completion)

次にM-x anything、何でもします。

ECB(Emacs Code Browser の略)も試してみてください。Linux を使用している場合は、おそらく標準リポジトリで利用できます。

于 2012-02-22T15:19:33.753 に答える
9

を使用することでメリットが得られますido-mode。これにより、emacs のほぼすべての場所でオートコンプリートが大幅に強化されます (特にファイルやバッファーを検索する場合)。

(setq ido-enable-flex-matching t
      ido-auto-merge-work-directories-length -1
      ido-create-new-buffer 'always
      ido-use-filename-at-point 'guess
      ido-everywhere t
      ido-default-buffer-method 'selected-window)
(ido-mode 1)
(put 'ido-exit-minibuffer 'disabled nil)
(when (require 'ido-ubiquitous nil t)
  (ido-ubiquitous-mode 1))

これは「遠く離れていない」ファイルをすばやく見つけるのに役立つかもしれませんが、まったく異なる場所にあるファイルを見つけるのにはおそらくあまり役​​立ちません。

この問題への取り組みを開始する 1 つの方法が、 を使用recentf-modeして最近の場所にすばやく移動することであることがわかった場合 (通常のプロジェクト ディレクトリが少数しかない場合は、これでうまくいく可能性があります)。recentfこのようなものを使用して組み合わせることができますido(このスニペットをどこから入手したかわかりません):

(recentf-mode 1)
(setq recentf-max-saved-items 50)
(defun ido-recentf-open ()
  "Use `ido-completing-read' to \\[find-file] a recent file"
  (interactive)
  (if (find-file (ido-completing-read "Find recent file: " recentf-list))
      (message "Opening file...")
    (message "Aborting")))
(global-set-key (kbd "C-x C-r") 'ido-recentf-open)

これにより、C-x C-f( ido-find-file) を使用して現在の場所の近くにあるファイルを検索したり、C-x C-r( ido-recentf-open) 最近開いたファイルを検索したりできます (そのうちの 1 つが目的の場所からそれほど遠くないことを願っています)。

于 2012-02-22T15:11:29.187 に答える
8

さまざまなアプローチがあります。ファイル名キャッシュは組み込みのソリューションです。最近のファイルからファイルを開くことも非常に効果的です。特に、保存されているファイルを高い数(1000など)に設定した場合はそうです。ファイルシステムのどこからでもファイルを開くためのパッケージもあります。また、anything.elのようなメタソリューションがあり、共通のインターフェイスで複数のソース(履歴、プロジェクトファイルなど)からのファイルの完了を表示できます。

さまざまなオプションを調べて、どれが自分に最も適しているかを見つける必要があります。

于 2012-02-22T15:18:58.860 に答える
7

IDO と recetf に加えて、次のメソッドを使用できます。

  1. ディレクトリを再帰的に開きます。

    (defun op-i:dired (rec)
      "customized dired: will display directory recursively when called with an argument"
      (interactive "P")
      (let ((dir (car (find-file-read-args "Dired: " nil))) 
            (opts (if rec (read-string "options: " "-lhAR") "-lhA")))
        (if (file-directory-p dir) (dired dir opts))))
    
    (define-key (current-global-map) (kbd "C-x C-d") 'op-i:dired)
    

    次に、(ワイルドカード) 検索を使用して、他のバッファーと同様にディレクトリ バッファー内を移動できます。

  2. Emacs レジスタを使用して、頻繁に使用されるディレクトリをポイントします。.emacs で初期化できます

    (set-register ?0 (cons 'file "c:/path/to/my-project0"))
    (set-register ?1 (cons 'file "c:/path/to/my-project1"))
    

    次に、ジャンプして登録しますC-x r j

于 2012-02-22T15:12:07.567 に答える