Подтвердить что ты не робот

Использовать ag в ctrlp + vim

Я хочу использовать ag (серебряный искатель) с ctrlp и vim. У меня это в моем .vimrc:

if executable("ag")
    set grepprg=ag\ --nogroup\ --nocolor
    let g:ctrlp_user_command = 'ag %s -l --nocolor -g ""'
endif

let g:ctrlp_show_hidden = 1

set wildignore+=*/tmp/*,*.so,*.swp,*.zip,*/.tmp/*,*/.sass-cache/*,*/node_modules/*,*.keep,*.DS_Store,*/.git/*

Я хочу, чтобы ctrlp включал скрытые файлы, но они скрыты. Если я добавлю -u в команду ag, он отобразит все скрытые файлы, но не будет соблюдать wildignore или .gitignore. Можно ли это уважать?

4b9b3361

Ответ 1

Если вы используете пользовательский поиск через ctrlp_user_command, несколько параметров, включая шаблоны ctrlp_show_hidden ctrlp_custom_ignore и vim wildignore, не используются CtrlP (см. документацию).

г: ctrlp_show_hidden

...

Примечание: не применяется, когда команда, определенная с помощью | Г: ctrlp_user_command | используется.

г: ctrlp_custom_ignore

...

Примечание # 1: по умолчанию, | wildignore | и | g: ctrlp_custom_ignore | только применять, когда | globpath() | используется для сканирования файлов, поэтому эти параметры не применяются, когда команда, определенная с помощью | g: ctrlp_user_command | является используется.

Итак, вы остаетесь во власти вашего поискового инструмента, в данном случае, ag. К счастью, вы можете сделать пару вещей, которые должны дать вам поведение, которое вы хотите.

Чтобы ваши скрытые dotfiles появлялись, но все равно уважайте файлы ignore, используйте параметр --hidden для ag:

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

Теперь, чтобы определить шаблоны для игнорирования, вы можете использовать собственный файл игнорирования .agignore. Это может быть каталог или глобальный, который будет проверяться при каждом запуске. Вы помещаете это в свой домашний каталог ~/.agignore.

Я понимаю, что может быть приятно, что vims wildignore заботится о шаблонах, но с .agignore вы получаете бонус этих ограничений при использовании ag из cli. Если вы хотите искать все файлы, просто используйте команду ag -u, которую вы упомянули, чтобы обойти любые файлы ignore.

В качестве окончательного лакомого кусочка есть формат словаря, который вы можете использовать для определения g:ctrlp_user_command, который содержит ключ ignore, который будет использовать шаблоны CtrlP wildignore. Тем не менее, я никогда не пробовал это, и в документации указывается потенциальный удар производительности. Вы можете попробовать этот метод, если вам не нравится мое другое предлагаемое решение (см. Документацию).

Примечание № 3: если только Словарь | формат используется, а "игнорировать" задано и установлено в 1, | wildignore | и | g: ctrlp_custom_ignore | параметры не применяются, когда эти пользовательские команды используются. когда не присутствует, по умолчанию "ignore" устанавливается на 0, чтобы сохранить производительность преимущество использования внешних команд.