Я хотел бы findstr /m background *.vim | gvim
открыть все *.vim
файлы, содержащие background
в единственном экземпляре gvim - но я не могу заставить передачу по каналу работать.
Это очень похоже на этот вопрос, но вместо того, чтобы получить вывод stdin я хотел бы, чтобы GViM рассматривал вывод как список файлов, которые будут открыты - и в системе Windows, таким образом, xargs не гарантируется. Какие-либо идеи?
Могу придумать несколько способов:
Use vimgrep: после запуска gvim, введите:
:vimgrep /background/ **/*.vim
Это заполнит список быстрых исправлений всеми совпадениями (возможно более одного в файле), так что вы можете использовать такие вещи, как :copen
, : cw
, :cn
и т.д. для навигации (см. :help quickfix
)
Используйте findstr
, чтобы получить список файлов, а затем заставьте vim открыть эти файлы:
findstr /m background *.vim > list_of_files.txt
gvim list_of_files.txt
" In Gvim, read each file into the buffer list:
:g/^/exe 'badd' getline('.')
" Open the files in tabs:
:bufdo tabedit %
Это загрузит каждый файл, но сохранит список файлов открытым (вы всегда можете загрузить его или что-то в этом роде).
Редактирование :
Использование :tabedit
в списке файлов не сработало (я только проверил :badd
). Вы можете обойти это, либо используя badd и затем bufdo (как описано выше), либо сделав что-то подобное (поместите это в ваш vimrc):
command! -range=% OpenListedFiles <line1>,<line2>call OpenListedFiles()
function! OpenListedFiles() range
let FileList = getline(a:firstline, a:lastline)
for filename in FileList
if filereadable(filename)
exe 'tabedit' filename
endif
endfor
endfunction
Затем просто откройте файл, содержащий все необходимые имена файлов и введите:
:OpenListedFiles
Используйте функциональность сервера и какой-нибудь пакетный скриптинг (который я не понимаю, так как я использую bash)
@echo off
REM Welcome to the hideous world of Windows batch scripts
findstr /m background *.vim > list_of_files.txt
REM Run GVIM (may not be required)
gvim
REM Still in command prompt or .bat file here
REM for each line in the file "list_of_files.txt", pass the line to OpenInTab
for /f %%i in (list_of_files.txt) do call:OpenInTab %%i
goto:eof
:OpenInTab
REM Open the file in a separate tab of an existing vim instance
gvim --remote-tab %~1
goto:eof
Eeeurrgh.
На моем месте я бы выбрал опцию "Использовать встроенный ум Вима". На самом деле, это не так: я бы использовал скрипт bash cygwin и просто использовал bash, но если бы я HAD сделал это с нативными инструментами, я бы использовал встроенный подход "ум".
.Откройте Powershell:
gvim $(findstr /m background *.vim)
В bash:
grep -l background *.vim | xargs gvim
Ключ - xargs
. Он берет строки из стандартного входа и передает их в качестве аргументов командной строки. grep -l
просто печатает имена файлов со спичками.
Другая идея, если у вас нет xargs
и вы не можете их загрузить, затем вы можете преобразовать строки в команды vim (:редактировать имя файла
) и заставить vim выполнить их, т.е. открыть все файлы. Опять же, в моём окружении, где у меня есть sed
:
grep -l background *.vim | sed 's/^/:edit /' > files
vim -s files
Даже если у вас нет sed
, вы, вероятно, сможете заменить его на vi -e
(ed
).