Как искать одно слово в нескольких файлах gvim из командной строки? - PullRequest
1 голос
/ 28 мая 2020

Я хочу открыть несколько файлов на разных вкладках и искать во всех одно и то же слово. Затем я хочу перейти к первому вхождению найденного слова в каждом файле.

Это работает, но не переходит к первому вхождению:

gvim -p -cmd "/word" file1 file2 file3 file4 file5 file6 file7

Мне нужно вручную нажмите 'n', чтобы go перейти к следующему совпадению.

Ответы [ 3 ]

1 голос
/ 28 мая 2020

Поскольку вы открываете файлы на отдельных страницах вкладок, вы можете использовать :help :tabdo для выполнения поиска на каждой странице.

Если это нормально, просто go для строка первого совпадения, вы можете выполнить поиск напрямую через :/:

vim -p -c 'tabdo /word/' file1 file2 file3 file4 file5 file6 file7

Чтобы также go до начала первого совпадения в строке, мы нужно что-то вроде этого, используя обычный режим n:

vim -p -c "/word" -c 'tabdo 1normal! n' file1 file2 file3 file4 file5 file6 file7
1 голос
/ 28 мая 2020

Vim не предоставляет способ выполнить команду для каждого файла в командной строке. Параметр -c вызывает выполнение команды после чтения первого файла, а --cmd - до открытия любых файлов.

Если вы хотите сделать это, вы d, вероятно, потребуется определить сценарий с функцией, которая это делает (скажем, Search), загрузить сценарий с помощью -S, а затем выполнить его с параметром --remote-send. Во многих системах gvim запускается с именем сервера по умолчанию по умолчанию, но если это не так, вам нужно будет использовать --servername с вашим начальным процессом.

В качестве альтернативы вы можете сделать это из командной строки с помощью grep, что было бы более гибко, но, конечно, не появилось бы в редакторе.

0 голосов
/ 30 мая 2020

Возможно, вас заинтересуют :grep и :vimgrep, которые заполняют список Quickfix:

$ gvim file*
:vimgrep /pattern/ ##

## означает поиск в списке аргументов, который вы можете просмотреть с помощью :args. Это то, что используют :next и :prev.

Теперь вы можете перемещаться по поиску с помощью :cnext и :cprev; или вы можете открыть окно quickfix :copen и нажать Enter в любой строке.

Вы все еще можете открыть все файлы во вкладках с помощью :cfdo tabedit, но на этом этапе это может быть необязательно!

...