Есть ли способ настроить VIM для интерактивного поиска внутри каждого файла для всего проекта?
Под интерактивом я подразумеваю обновление каждого нажатия клавиши.
Что-то вроде Emacs counsel-git-grep , см. Пример демо .
Есть ли способ настроить VIM для интерактивного поиска внутри каждого файла для всего проекта?
Под интерактивом я подразумеваю обновление каждого нажатия клавиши.
Что-то вроде Emacs counsel-git-grep , см. Пример демо .
ctrl-p
или подобный плагин - то, что вы ищете. Обратите внимание, что этоunite.vim
тоже должно быть в состоянии сделать, но я бы не рекомендовал этого, потому что, на мой взгляд, это довольно тяжелый и создающий ошибки плагин.ctrl-p
способ интерактивного поиска содержимого файла? Я использовал его только для интерактивного поиска файлов по их именам.Ответы:
Я не уверен, что это то, что вы ищете, но, возможно, вы могли бы попробовать fzf и fzf.vim .
Если вы используете vim-plug в качестве менеджера плагинов, все, что вам нужно сделать, чтобы установить их, это добавить следующие строки в ваш
vimrc
:... где-то между строк:
и:
Затем выполните
:PlugInstall
.Среди различных команд и отображений, предоставляемых
fzf.vim
(чья единственная цель, по-видимому, заключается в установке отображений и команд, запрашивающихfzf
нечеткий поиск по предопределенным источникам), есть команда:Ag
.Чтобы использовать его, вам нужно установить команду оболочки ag . В дистрибутивах на основе Debian это можно сделать с помощью следующей команды:
Проект на github объясняет, как установить его на MacOS:
:Ag
является оберткой вокруг$ ag
и позволяет нечетко искать шаблон в файлах текущего каталога (тот, который отображается при вводе:pwd
). Матчи обновляются после каждого нажатия клавиши.Вы можете:
C-n
иC-p
Tab
/S-Tab
M-a
илиM-d
Если вы выберете одно или несколько совпадений, после нажатия Enter они будут заполнены списком быстрых исправлений. Оттуда вы сможете перемещаться по ним с помощью команд / отображений Vim по умолчанию, таких как
:cnext
и:cprevious
.Если вы хотите добавить префикс ко всем установленным командам
fzf.vim
и избежать переопределения существующих команд, вы можете добавить это вvimrc
:Я использую
Fzf
в качестве префикса, поэтому я не печатал,:Ag
но:FzfAg
.Если вы предпочитаете использовать
git grep
вместоag
, кажется, вы можете установить вокруг него свою собственную оболочку,:GGrep
например:Это объясняется в
:h fzf-vim-customization
.Кроме того , если
fzf
открывает панель в tmux, и вы предпочли бы это занимает весь экран вместо этого, вы можете добавить челку для всех команд (:Ag!
,:GGrep!
, ...).Как вы сказали в своем последнем комментарии , по умолчанию
fzf
изменяется конфигурация вашей оболочки. Например, если вы используетеbash
, он добавит следующую строку в ваш~/.bashrc
:Это будет источником файла
~/.fzf.bash
. Последний содержит некоторый код:Этот код добавляет путь к переменной окружения
$PATH
:/home/user/.fzf/bin
; это папка, содержащаяfzf
программу.Он также содержит 2 других файла:
Первый, похоже, определяет функции завершения, а второй устанавливает привязки клавиш.
К сожалению, привязки клавиш могут переопределять
readline
функции по умолчанию .Например,
fzf
связывает функциюfzf-file-widget
сC-t
. Этот ключ обычно используется readline для выполненияtranspose-chars
функции.Если вы не хотите этого, одним из возможных решений было бы восстановить привязки клавиш внутри вашей
~/.bashrc
, после того, какfzf
он выбрал ее конфигурацию. Например, если вы хотитеC-t
сохранить его старое поведение, то есть транспонировать 2 символа вокруг курсора и привязатьfzf-file-widget
к другой клавише, скажемC-x C-t
, вы можете добавить эти строки в конце~/.bashrc
:То же самое относится и к
zsh
оболочке, но синтаксис для установки привязки ключей немного отличается:Если одна из привязок ключа оболочки, к которой вы привыкли, была переопределена
fzf
, вы хотите восстановить ее, но не знаете, какое именно имя функции было выполнено, вы можете попробовать следующее.Сначала, внутри
~/.bashrc
, временно закомментируйте строку, которая является источникомfzf
конфигурации. Затем снова откройте терминал и посмотрите на выводbind -P
команды, которую вы можете прочитать в буфере Vim:Я не уверен, но я думаю, что он должен отображать большинство или все
readline
привязки клавиш. Если вы ищете имя функции readline, связанной сC-t
клавишей, в буфере Vim вы будете искать\\C-t
. И если вы искали привязанный кM-c
(мета / альтернативный ключ), вы бы искали\\ec
(\e
обозначает escape-ключ, и кажется, что онM-c
производит те же коды клавиш, что иescape + c
).Вы можете сделать то же самое
zsh
, посмотрев на выводbindkey
команды. Но на этот раз это^[
клавиша-модификатор meta / alt, в то время как одиночный^
символ caret ( ) обозначает клавишу управления.В настоящее время я нашел 4 привязки клавиш, выполняющие функции, содержащие
fzf
ключевое слово в их имени. Они используют последовательности клавишC-i
(так же, какTab
)C-r
,C-t
иM-c
. Они связаны со следующими функциями:Первоначально в моей системе
readline
(библиотека, используемаяbash
для редактирования командной строки) связывала эти ключи с этими функциями:И
zle
(редактор строк, используемыйzsh
) связал их с:источник
ag
отдельный плагин / инструмент, который нужно установить?ag
также была необходима. Я обновил ответ.