1

Я использую Vim в своем развитии. Также используется:vimgrep для поиска текста в файлах в Vim. Но пока vimgrep ищет, я ничего не могу сделать внутри Vim, пока он не закончится.

Давным-давно я видел видео на Youtube, где вы можете просматривать Vim, не блокируя текстовый редактор. К сожалению, не могу найти это видео сейчас.

Как вы можете запустить grep внутри vim, отобразить результаты в буфере (в формате quickfix или как угодно), аналогично vimgrep, не блокируя редактор? Есть идеи?

4 ответа4

2

С vim 8 это отличный способ использовать плагин asyncrun.vim для запуска команд оболочки и чтения вывода в окне быстрого исправления в реальном времени.

После установки grep можно запускать асинхронно с помощью ':AsyncRun grep'.Вывод отображается в окне быстрого исправления. Вы можете сразу же просмотреть вывод совпадения или продолжить работу в vim во время выполнения.

1

Есть несколько способов.

Самый простой способ - установить плагин. Например, http://www.vim.org/scripts/script.php?script_id=3431 имеет встроенные команды для grep, make и некоторых других.

Другой метод (если вы знаете Python, Perl, TCL или что-то в этом роде) - использовать внешний язык сценариев с поддержкой потоков и вызывать его с помощью интерфейса Vim к этому языку. Это может быть сложно и зависит от компиляции Vim с поддержкой этого языка сценариев.

Наконец, встроенный метод использует функции Vim «клиент-сервер». Идея состоит в том, чтобы вызвать внешнюю команду (с помощью system() или :!start cmd), где cmd запустит поиск и затем перезвонит в Vim, используя --remote-expr и предварительно определенное имя файла. Выражение для выполнения Vim должно быть функцией, которая считывает файл с :cfile или подобным, чтобы получить результаты поиска. См. Http://vim.wikia.com/wiki/Execute_external_programs_asynchronously_under_Windows#Getting_results_back_into_Vim для полностью разработанного примера этого метода. Я думаю, что на Linux вы можете использовать !cmd & метод запуска команды в фоновом режиме вместо !start cmd как на винде.

0

Вы можете выполнить прямой поиск, нажав / и введя искомую строку. ? для обратных поисков. Нажмите n, чтобы повторить поиск, N, чтобы вернуться к результатам последнего поиска.

0

Dispatch также отличный плагин для асинхронных операций:

Используйте возможности плагинов компилятора Vim, не будучи связанными синхронностью. Начните> сборки и тестирования комплектов с использованием одного из нескольких асинхронных адаптеров (включая tmux, screen,> iTerm, Windows и режим без монитора), и по завершении задания ошибки будут загружаться и> анализироваться автоматически.

https://github.com/tpope/vim-dispatch

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .