Найти тему
Блокнот математика

Рубрика "Секреты Вим". Окно предпросмотра

Обсудим команды для окна предпросмотра — есть такая возможность в Вим.

В Вим есть особые виды окон, например окно справки. Если оно открыто и вы запросили новую справку, она откроется в том же окне. И специальные команды для него есть. Например, helpclose.

Ещё особым является окно истории команд.

А есть окно предпросмотра. Технически это просто окно, но у него свое поведение и свои команды. Оно обычно маленькое и его цель — дать возможность посмотреть, что в другом файле (заголовочном, например). Курсор остается в том окне, где был, а закрыть окно предпросмотра можно, не переходя в него. Это и есть предпросмотр. Но при необходимости все можно: и перейти в окно, и работать там.

Сверху - оно. Высотой 12 строк. Поиск по слову tol: вон оно, по центру. Курсор остался в рабочем окне - оно специально уменьшено для скриншота, а так-то, конечно, на весь экран. Команда видна внизу.
Сверху - оно. Высотой 12 строк. Поиск по слову tol: вон оно, по центру. Курсор остался в рабочем окне - оно специально уменьшено для скриншота, а так-то, конечно, на весь экран. Команда видна внизу.

На каждой вкладке оно может быть только одно, и открытое используется повторно. Его высота равна previewheight (по умолчанию 12 строк) и эта высота не меняется при открытии/закрытии других окон (выставлен флаг winfixheight).

Закрыть окно можно как обычно, но есть и специальные команды: <C-W>z, <C-W><C-Z>, :pclose. Все делают одно и то же: закрывают окошко предпросмотра. Это удобно, потому что можно закрыть именно его, а не что-нибудь другое по запарке, и можно закрыть без перемещения курсора в него. Не отрываясь от работы.

Если у вас есть список тэгов, то можно не переходить на тэг, а посмотреть его в окне предпросмотра: команда :ptag, которой надо указать имя искомого (обычно функции, или класса, иногда переменной). Можно не указывать имя, а использовать то, что под курсором: <C-W>}. Повторитель задает высоту окна, преодолевая previewheight. Это очень полезно, потому что часто надо просто увидеть определение, и больше оно не нужно.

Можно просто просмотреть какой-то файл, без тэгов: pedit. Открывает файл по имени, можно указать кодировку и прочие настройки.

Можно указать и команду, которую надлежит выполнить. Обычно при открытии файла это не нужно — откроешь и сделаешь — но здесь это полезно. Команды указаны после знака + (а опции вроде кодировки — после ++). Пример (не просто открыть, но и найти что надо):

:pedit +/my_function source_code.f

Команда psearch ищет шаблон в файле и открывает найденную строку (и несколько строк до и после) в окне предпросмотра. Шаблон обрамлен косыми чертами /.../, которые можно опустить, если ищется целое слово. Можно указать восклицательный знак, тогда шаблон ищется внутри комментариев. Без него комментарии игнорируются — осторожно! Это касается всех поисковых команд. Что такое комментарии — можно настроить.

Можно указать диапазон строк, чтобы искать только в них.

Попробуйте такую автокоманду (из Справки):

:au! CursorHold *.[ch] nested exe "silent! psearch " . expand("<cword>")

Она покажет в окошке предпросмотра (которое можно держать все время открытым) слово, на котором задержался курсор. Время задержки указано в опции updatetime. Ключевое слово nested допускает выполнение других автокоманд. А silent! подавит сообщение об ошибке, если поиск не удался.

Отключить эту автокоманду можно как обычно: :au! CursorHold

Удачи, коллеги!

Научно-популярные каналы на Дзене: путеводитель
Новости популярной науки12 марта 2022