実際のプロジェクトのファイルに対してのみ発射モードをオンにする


8

発射物はかなり素晴らしいですが、効果がある場所でのみオンにするのは難しいと感じています。

私が理解しているように、2つの標準的な選択肢は、メジャーモードフックのように手動でオンにするか、でグローバルに有効にすることprojectile-global-modeです。前者は十分に広いとは言えない。タイプに関係なく、プロジェクト内の任意のファイルを参照しながら、発射コマンドにアクセスできるようにしたい。しかし、モードをグローバルにオンにするのは広すぎます。それは私のホームディレクトリとして、そのような明白に非プロジェクトディレクトリを訪問しても、オン状態になる/tmp/etcなど

アクティブにするための標準的な方法があるprojectile-modeの有無をチェックする、によって決定されるかもしれないとして、実際のプロジェクトでの生活は、言うことを、ファイルを訪問したときにのみ.git.svnなど、現在のファイルのいくつかの祖先ディレクトリ内のディレクトリには?


.git.svn... の存在を確認することがデフォルトです。多分あなたはにprojectile-require-project-root設定を持っているnil
Tu Do

チェックしたところ、その値はtです。しかし、/etc例えばモードはまだアクティブ化されています。
Sean

1
Projectileのバージョンは何ですか?このprojectile-find-filesような非プロジェクトディレクトリで実行すると、Projectileは単に「プロジェクトに参加できません」というメッセージを表示します。正しいコマンドを実行してよろしいですか?
Tu Do

2
ああ、わかりました。しかしProjectile[etc]、を開いても、モードラインに表示されます/etc。それは貴重なモードラインの領域を占有します、そして私はむしろ非プロジェクトディレクトリでモードをまったくアクティブにしたくないです。
Sean

回答:


11

つまり、モードラインについてです。projectile-mode-lineプロジェクトルートにいるかどうかを確認するように設定できます。そうであれば、モードラインに表示し、そうでなければ何も表示しません。

(setq projectile-mode-line
      '(:eval (if (projectile-project-p)
                  (format " Projectile[%s]"
                          (projectile-project-name))
                "")))

4
その変化は発射物自体にあるはずです。
abo-abo 2015

これは間違いなく便利ですが、モードはまだ技術的にアクティブですよね?理想的には、そのような場合にモードがアクティブにならないことさえあります。
Sean

2
@ショーンは何のためですか?グローバルマイナーモードである理由があります。モードライン以外に、グローバルモードがアクティブな場合、何か邪魔になるものはありますか?グローバルモードがアクティブな場合は、発射体のキーバインディングが提供されます。
Tu Do

2
@ abo-aboまた、現在のを表示するのではなく、このように機能する必要があると思いますdefault-directory。PRします。
Tu Do

私はこれを私のinitファイルに入れましたが、非プロジェクトディレクトリから呼び出された場合に例外が発生する*Messages*ため、最終的にはバッファに大量のエラーが発生しましたprojectile-project-root。そのため、その関数呼び出しはでラップする必要がありcondition-case、さらにprojectile-require-project-rootにバインドする必要がありますt
Sean
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.