VimのCTRLPプラグインは、世界的に特定のフォルダ名を無視する方法があります。例えば:
let g:ctrlp_custom_ignore = '\v[\/]\.(git|hg|svn)$'
ただし、1つのプロジェクトに固有の無視ルールがあります。もっと.gitignore
ファイルのようなものが欲しいです。
グローバル構成を変更せずに、特定のプロジェクトの特定のフォルダーを無視する方法はありますか?
VimのCTRLPプラグインは、世界的に特定のフォルダ名を無視する方法があります。例えば:
let g:ctrlp_custom_ignore = '\v[\/]\.(git|hg|svn)$'
ただし、1つのプロジェクトに固有の無視ルールがあります。もっと.gitignore
ファイルのようなものが欲しいです。
グローバル構成を変更せずに、特定のプロジェクトの特定のフォルダーを無視する方法はありますか?
回答:
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
上記のコマンドは私にとってはうまくいきます。)
CtrlPにSilver Searcherバックエンドを使用している場合(はるかに高速)、.agignore
aと同じ形式でファイルをプロジェクトディレクトリに追加します.gitignore
。
.git/
.hg/
.svn/
または、グローバル~/.agignore
ファイルを保持します。
Silver Searcherをバックエンドとして追加し、これを .vimrc
let g:ctrlp_user_command = 'ag %s -l --nocolor --hidden -g ""'
if executable("ag") let g:ctrlp_user_command = 'ag %s -l --nocolor --depth 8 -g ""' endif
。深度制限は、ホームフォルダー内のファイルを編集中に誤ってctrl-pを押した場合に役立ちます。私は隠されたフラグは.gitで/ファイルが含まれることが判明
.gitignore
(Nathan grepソリューションに基づく)のようなファイルでこれを解決するために、名前の付いたファイルを作成し、.ctrlpignore
無視するパターンを行で区切って配置しました。
node_modules/
\.log$
...
そして、私のctrlp設定:
let g:ctrlp_user_command = 'find %s -type f | grep -v "`cat .ctrlpignore`"'
おそらく、.gitignore
それ自体を使用してctrlp内のファイルを無視することができ、ほぼ同じことを行うために新しいファイルを作成する必要はありません。
以下のようワグナーアンドラーデは言った、別々に使用すると.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'
.ctrlpignore
ctrlpによってルートディレクトリとして認識される任意のディレクトリに配置できます。以下に例を示します。すべての行は./
vim ~/.ctrlpignore
./Desktop
./R
./.vim
./.local/lib
.....
注意:
grep -F
パターンを解釈します、ex。「./.tmp」。「./ptmp」を除外したくない場合の固定文字列として。まだ些細なバグがいくつかあります。「./。tmp」は「./.tmp2」も除外します。忘れて、好きじゃない\.
g:ctrlp_custom_ignore
g:ctrlp_user_command
が設定されている場合は無視されます。それらはより複雑に行うことができますg:ctrlp_user_command
ブラックリストの代わりにホワイトリストも可能です。別のスクリプトで実装するとより便利です