2017-03-11 11 views
7

here示唆したように私は、ctrlpagを使用します。ctrlpをgit repoの外側にあるagで正しく動作させるにはどうすればよいですか?

if executable('ag') 
    set grepprg=ag\ --nogroup\ --nocolor 
    let g:ctrlp_user_command = 'ag %s -l --nocolor -g ""' 
    let g:ctrlp_use_caching = 0 
else 
    let g:ctrlp_custom_ignore = '\.git$\|\.hg$\|\.svn$' 
    let g:ctrlp_user_command = ['.git', 'cd %s && git ls-files . --cached --exclude-standard --others'] 
endif 

私はその中.gitフォルダとプロジェクトフォルダからのvimを実行している場合、これは素晴らしい作品。しかし、私はgitプロジェクトのルートではないディレクトリからVimを実行するたびに、空のファイルリスト(結果なし)を取得します。以下のフォルダ階層で、明確にする:私は同じディレクトリでコマンドラインから実行するとき

Proj1/ # ctrlp works; finds foo.js and bar.js (unless they are .gitignored) 
    .git/ 
    bin/ 
    foo.js 
    bar.js 

Proj2/ # ctrlp doesn't work; has empty file list 
    bin/ 
    foo.py 
    bar.py 

実際agコマンド、ag %s -l --nocolor -g ""は、正常に動作します(これは、すべてのファイルを検索します)。ここで

は私ctrlp設定の全体です:

map <c-p> :CtrlP<cr> 
map <c-t> :CtrlPTag<cr> 
let g:ctrlp_dotfiles   = 1 
let g:ctrlp_show_hidden   = 1 
let g:ctrlp_cmd     = 'CtrlPMixed'  " search anything (in files, buffers and MRU files at the same time.) 
let g:ctrlp_cmd     = 'CtrlP' 
let g:ctrlp_working_path_mode = 'ra'    " search for nearest ancestor like .git, .hg, and the directory of the current file 
let g:ctrlp_match_window  = 'top,order:ttb' 
let g:ctrlp_max_height   = 12     " maxiumum height of match window 
let g:ctrlp_switch_buffer  = 'et'    " jump to a file if it's open already 
let g:ctrlp_use_caching   = 1     " enable caching 
let g:ctrlp_clear_cache_on_exit = 0     " speed up by not removing clearing cache evertime 
let g:ctrlp_mruf_max   = 250    " number of recently opened files 

if exists('g:ctrlp_user_command') 
    unlet g:ctrlp_user_command 
end 

if exists('g:ctrlp_custom_ignore') 
    unlet g:ctrlp_custom_ignore 
end 

if executable('ag') 
    set grepprg=ag\ --nogroup\ --nocolor 
    let g:ctrlp_user_command = 'ag %s -l --nocolor -g ""'" 
    let g:ctrlp_use_caching = 0 
else 
    let g:ctrlp_custom_ignore = '\.git$\|\.hg$\|\.svn$' 
    let g:ctrlp_user_command = ['.git', 'cd %s && git ls-files . --cached --exclude-standard --others'] 
endif 

let g:ctrlp_prompt_mappings = { 
    \ 'AcceptSelection("e")': ['<c-t>'], 
    \ 'AcceptSelection("t")': ['<cr>', '<2-LeftMouse>'], 
    \ 'ToggleType(1)':  ['<c-u>', '<c-up>'], 
    \ 'ToggleType(-1)':  ['<c-y>', '<c-down>'], 
    \ 'PrtExit()':   ['<c-l>', '<esc>', '<c-c>', '<c-g>'], 
    \ 'PrtSelectMove("j")': ['<c-n>', '<down>'], 
    \ 'PrtSelectMove("k")': ['<c-p>', '<up>'], 
    \ 'PrtHistory(-1)':  ['<c-j>'], 
    \ 'PrtHistory(1)':  ['<c-k>'], 
    \ } 

let g:ctrlp_buftag_types = { 
    \ 'coffee'  : '--language-force=coffee --coffee-types=cmfvf' 
\ } 

にはどうすればctrlp/agはgitのレポの外で正しく動作するために得ることができますか?

+0

質問の最初の行に適切なリンクを付けましたか?私はそれに関連するものは何も見ません – yolenoyer

+0

残念です - リンクが更新されました。これは、私と同じ振る舞いをしている(つまり、同じような動作をしている)別の 'ag'コマンドを使って[別の同様のvimrc](https://github.com/skwp/dotfiles/blob/master/vim/settings/ctrlp.vim)動作しません)。 – Sasgorilla

+0

':echo executable( 'ag')'で '1'を取得しますか? – Tacahiroy

答えて

3

PEBCAK。 CtrlPAgは、両方とも彼らが想定していることをしています。私は.gitというフォルダを私のホームディレクトリに持っています。ドットファイルといくつかのオッズとエンドをバックアップしています。 .gitignoreは、とりわけ~/Documents/を無視するように設定されています。したがって、~/Documents/というサブフォルダからCtrlPを実行すると、ファイルが見つからなくなります(ホームディレクトリgit repo内にあるので、すべてのファイルは無視されます)。これがCtrlPが空白になる理由です。 ~/Documents/の外で実行すると、正常に動作します。ホームディレクトリの.gitレポは~/Documents/のサブフォルダ内のコマンドラインでagを台無しにしない理由

しかし、私はまだわかりませんよ。 VimではCtrlPでしか発生しません。 (再度、私はCtrlPがコマンドag %s -l --no-color -g ""を使用していることを確認しました。)それに関する考えは歓迎です。また、私のホームディレクトリのgit repoを削除する以外は問題を解決する方法もわかりません(恐らく~のドットファイルをdotfilesディレクトリにハードリンクすることによって)。

0

あなたが投稿した設定でGitリポジトリの外にいる場合、ctrlpはファイルを見つけません。

次の設定では、ctrlpはgit ls-filesを使用してGitリポジトリにいる場合はファイルリストを取得します。それ以外の場合はctrlpはagを使用します。

let g:ctrlp_user_command = { 
    \ 'types': { 
     \ 1: ['.git', 'cd %s && git ls-files'] 
     \ }, 
    \ 'fallback': 'ag %s -l --nocolor -g ""' 
    \ } 

:h g:ctrlp_user_command詳細を参照してください。

+0

私の最初の質問は混乱しているかもしれないと思います。実際の '.git /'フォルダ自体の中からだけでなく、 '.git /'フォルダを内部に持つプロジェクトフォルダの場合、CtrlPは正しく機能します。言い換えれば、もし私のプロジェクトがgitを使用していれば、CtrlPが動作します。そうでなければ、そうではありません。私はこのことをうまく解明するために質問を編集しました。 – Sasgorilla

+0

':echo g:ctrlp_user_command'とは何ですか?私は 'ag%s ...'だと思いますが、 – Tacahiroy

+0

':echo g:ctrlp_user_command'は期待される出力を出力します:' ag%s -l --no-color -g "" '(実際のケースと壊れたケースの両方で)。 – Sasgorilla

関連する問題