grep в VIM открывает терминал с результатами перед их отображением в vim - PullRequest
2 голосов
/ 22 апреля 2020

Я запускаю vim в терминале и всякий раз, когда я ищу что-то, используя grep, например

:grep search_for filename

, он закрывает vim, показывает результат в терминале с «Нажмите Enter для продолжения» сообщение и только после того, как я нажму ввод, он показывает результаты обратно в VIM. Как предотвратить открытие этого терминала и показать результаты непосредственно в vim?

Ответы [ 2 ]

1 голос
/ 22 апреля 2020

Один из способов будет заключаться в следующем:

function! Grep(...)
    return system(join([&grepprg] + [a:1] + [expandcmd(join(a:000[1:-1], ' '))], ' '))
endfunction

command! -nargs=+ -complete=file_in_path -bar Grep  cgetexpr Grep(<f-args>)
command! -nargs=+ -complete=file_in_path -bar LGrep lgetexpr Grep(<f-args>)

cnoreabbrev <expr> grep  (getcmdtype() ==# ':' && getcmdline() ==# 'grep')  ? 'Grep'  : 'grep'
cnoreabbrev <expr> lgrep (getcmdtype() ==# ':' && getcmdline() ==# 'lgrep') ? 'LGrep' : 'lgrep'

augroup quickfix
    autocmd!
    autocmd QuickFixCmdPost cgetexpr cwindow
    autocmd QuickFixCmdPost lgetexpr lwindow
augroup END

Это позволит вам набирать :grep foo без необходимости нажимать «Enter». Я бы рекомендовал вам прочитать статью / гист .

0 голосов
/ 22 апреля 2020

Я не знаю, может ли vim сделать это, но neovim (реализация vim на C ++, более мощная) может сделать это с помощью этой команды:

:sp | term. После этого вам нужно войти в режим «Вставка», сделать grep, перейти в «нормальный» режим, скопировать строки и вставить его в файл vim.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...