Vim Ctrlpプラグインを取得して、1つのプロジェクトの特定のフォルダーを無視できますか?


17

VimのCTRLPプラグインは、世界的に特定のフォルダ名を無視する方法があります。例えば:

let g:ctrlp_custom_ignore = '\v[\/]\.(git|hg|svn)$'

ただし、1つのプロジェクトに固有の無視ルールがあります。もっと.gitignoreファイルのようなものが欲しいです。

グローバル構成を変更せずに、特定のプロジェクトの特定のフォルダーを無視する方法はありますか?


プラグインの問題トラッカーを試しましたか?
ロメインル

回答:


20

カスタムリストコマンドを使用する

Ctrlpを使用すると、フォルダー内のファイルのリストを取得するために使用するコマンドを指定できます。という名前の何かを除外したい場合はbeets.txt、次のようにします。

let g:ctrlp_user_command = 'find %s -type f | grep -v "beets.txt"'

それはグローバルですが、答えに向かって開始します:独自のシェルコマンドを提供します。

さらに良いことに、Ctrlpを使用すると、複数のシェルコマンドにマーカーを指定できます。つまり、「ルートディレクトリにこのマーカーが表示されている場合は、このコマンドを使用します」という意味です。

私はこれをで発見:help ctrlpし、問題に関する著者のコメントに基づいてわずかに修正しました。

let g:ctrlp_user_command = {
  \ 'types': {
    \ 1: ['.git', 'cd %s && git ls-files --cached --exclude-standard --others'],
    \ 2: ['.hg', 'hg --cwd %s locate -I .'],
    \ },
  \ 'fallback': 'find %s -type f'
  \ }

この手段は:「あなたが表示された場合.gitフォルダ内に、使用git ls-files...。あなたが見ればそうでない場合は、.hg使用hg --cwd...、そうでない場合は、通常のを使用しますfind。」

したがって、1つのプロジェクトの特定のフォルダーを無視するには、そのフォルダーを無視するコマンドを考案し、そのプロジェクトに一意のマーカーを配置して、ここで特別なコマンドを使用するCtrlpを許可します

(私の場合、実際にはにあるファイルを無視したかった.gitignoreので、git ls-files上記のコマンドは私にとってはうまくいきます。)


これはすごいです、この答えに感謝します。
デニス14

git -C%s ls-files --cached --exclude-standard --othersはgitで動作するはずです。
アルンプラサドラジクマール

11

CtrlPにSilver Searcherバックエンドを使用している場合(はるかに高速)、.agignoreaと同じ形式でファイルをプロジェクトディレクトリに追加します.gitignore

.git/
.hg/
.svn/

または、グローバル~/.agignoreファイルを保持します。

Silver Searcherをバックエンドとして追加し、これを .vimrc

let g:ctrlp_user_command = 'ag %s -l --nocolor --hidden -g ""'

1
これを投稿してくれてありがとう。別のデータポイントを追加するには、次のようにしました if executable("ag") let g:ctrlp_user_command = 'ag %s -l --nocolor --depth 8 -g ""' endif 。深度制限は、ホームフォルダー内のファイルを編集中に誤ってctrl-pを押した場合に役立ちます。私は隠されたフラグは.gitで/ファイルが含まれることが判明
エリック・胡

6

ファイル内の意図的に追跡されていないファイルを指定します

.gitignore(Nathan grepソリューションに基づく)のようなファイルでこれを解決するために、名前の付いたファイルを作成し、.ctrlpignore無視するパターンを行で区切って配置しました。

node_modules/
\.log$
...

そして、私のctrlp設定:

let g:ctrlp_user_command = 'find %s -type f | grep -v "`cat .ctrlpignore`"'

おそらく、.gitignoreそれ自体を使用してctrlp内のファイルを無視することができ、ほぼ同じことを行うために新しいファイルを作成する必要はありません。


このスニペットを追加しましたが、全体的なctrlpの動作を壊します。orderscontrollerと入力すると、_specファイルのみが見つかり、実際のorders_controller.rbファイルは見つかりません。
ジェディ

1

以下のようワグナーアンドラーデは言った、別々に使用すると.ctrlpignore良いでしょう。

より堅牢で便利なvim設定は次のとおりです。

let g:ctrlp_user_command = 'cd %s;
  \ commonfilter="\.(jpg|bmp|png|jar|7z|zip|tar|gz|tgz|bz)$";
  \ if [ ! -r ".ctrlpignore" ]; then
  \   find . -type f | grep -Evi "$commonfilter";
  \ else
  \   find . -type f | grep -vF "$(cat .ctrlpignore)" | grep -Evi "$commonfilter";
  \ fi'

.ctrlpignorectrlpによってルートディレクトリとして認識される任意のディレクトリに配置できます。以下に例を示します。すべての行は./

vim ~/.ctrlpignore

./Desktop
./R
./.vim
./.local/lib
.....

注意:

  1. grep -Fパターンを解釈します、ex。「./.tmp」。「./ptmp」を除外したくない場合の固定文字列として。まだ些細なバグがいくつかあります。「./。tmp」は「./.tmp2」も除外します。忘れて、好きじゃない\.

  2. g:ctrlp_custom_ignoreg:ctrlp_user_commandが設定されている場合は無視されます。それらはより複雑に行うことができますg:ctrlp_user_command

  3. ブラックリストの代わりにホワイトリストも可能です。別のスクリプトで実装するとより便利です

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.