Во многих языках программирования (в широком смысле) есть возможность вставить файл. Имеется в виду, что в каком-то месте указано имя файла командой вроде include, которая предписывает вставить в это место содержимое указанного файла. Это широко используется в Си и других языках GNU Compiler Collection. Есть такая команда и в Фортране, есть \input в ТеХ, и много где еще. Это не лучший способ организации кода, но иногда бывает полезен и, главное, до сих пор используется.
Вим обладает средствами поиска по файлу с учетом внедренных, и средства эти могут быть полезны и в других случаях, например, для модулей.
Немаловажно, что поиск этот рекурсивен: внедренные во внедренные файлы тоже просматриваются.
Если файл не удалось найти, он игнорируется без сообщений об ошибке. И есть команды, позволяющие имена файлов посмотреть, чтобы определиться. Они полезны сами по себе, например, чтобы посмотреть зависимости.
Искомое может быть словом или макросом. Слово просто ищется, как таковое, а вот макрос должен подходить под определение макроса, которое указано в опции define. По умолчанию там ^\s*#\s*define (в начале строки решетка и потом слово define, и могут быть пробелы) — это для Си. Можете настроить для своего языка, например
:set define=^\\\\input
пригодно для ТеХ. Почему четыре слеша? Каждая пара означает один слеш в команде set, так что в переменной окажется ^\\input и именно это будет искаться, и двойной слеш означает просто слеш.
Поиск ведется в пределах строки, выражение не может содержать символ конца строки.
Многие команды начинаются с квадратной скобки. Команды с [ ищут от начала файла, а с ] ищут от курсора.
Опция include определяет команду, задающую внедряемый файл. По умолчанию это "\^#\s*include", что соответствует Си и ряду языков коллекции gcc. Однако в синтаксис Вим не вникает и найдет вхождения в комментариях и других местах. Но это обычно нестрашно.
Опция isfname описывает множество символов, которые могут входить в имя файла.
Для поиска файлов, для которых не указан абсолютный путь, используется опция path; о поиске файлов у нас был материал.
При поиске игнорируются комментарии (указанные в опции comment), но если в строке есть # define, то это никогда не считается комментарием.
Команды с квадратными скобками
Скобку, открывающую или закрывающую, здесь не указываем. Так что если ниже описана команда i, то это пара [i и ]i, отличающиеся точкой начала поиска.
i — поиск и показ первой строки, содержащей слово под курсором. Если дан повторитель, ищется соответственное совпадение и комментарии в этом случае не игнорируются.
I — поиск и показ всех строк, содержащих слово под курсором.
<C-I> — прыжок на первую строку, содержащую слово под курсором.
d, D, <C-D> — то же самое, что и команды семейства i, но для макросов.
Варианты командной строки
Все эти команды имеют аналоги командной строки, которые дают некоторые дополнительные возможности. Это isearch, ilist, ijump и dsearch, dlist, djump.
Все они ищут в указанном диапазоне строк (по умолчанию это весь файл).
Все они могут снабжаться восклицательным знаком и тогда не пропускают комментарии.
Все принимают шаблон для поиска, который заключен в косые черточки //, но их можно опустить, если это просто слово.
Однако d-команды ищут строку, а не регулярное выражение.
Все команды, кроме двух list-команд, могут принять перед выражением число-повторитель, и тогда они ищут соответствующее вхождение.
Открытие найденного в новом окне
Все описанные команды показывают найденную строку или строки (в последнем случае показывают еще и файл и номер строки), но иногда надо туда попасть и что-то отредактировать или изучить повнимательнее. Команда <C-W>i или ее синоним <C-W><C-I> открывают новое окно и первой его строкой будет найденная строка. В остальном команда аналогична [i: поиск идет с начала файла, комментарии игнорируются, если указан повторитель, то берется соответствующее совпадение, и комментарии при этом не пропускаются.
Аналог этой команды для командной строки тоже есть: это isplit.
Для поиска макросов так тоже можно: команды <C-W>d (синоним <C-W><C-D>) и dsplit.
Команда :checkpath покажет все include-файлы, который можно найти. С восклицательным знаком покажет вообще все, что имеются в проекте (то есть, в данном файле и в найденных файлах рекурсивно).
Эти команды особенно удобны. Если настроить опцию define, то можно найти все зависимости, например, от данного файла. Это бывает очень полезно.
Удачи, коллеги.