Найти в Дзене
Блокнот математика

Рубрика "Секреты Вим". Вим как more/less

Если вы привыкли к Виму так же, как я, то вам должна была прийти идея использовать его для просмотра выдачи на экран (точнее, на устройства stdout и stderr). Всегда можно перенаправить вывод в файл (символом >) и потом открыть файл. Например, ./this.exe > data.out Можно использовать ключ -, который, как мы помним, предписываем воспринимать все после него как текст, а не параметры командной строки. Тогда можно перенаправлять поток в Вим: он воспримет его как текст. Например, ls | vim -. Без минуса эффект будет неприятным: вим попытается воспринять все как командную строку, и это вряд ли то, чего вы ожидаете. Это очень удобно и я часто пользуюсь именно таким синтаксисом. Однако в поставке Вима идет скрипт, превращающий Вим в полноценный пейджер. Пейджером в Unix называется программа, показывающая текст частями: экранами. С одной стороны, она останавливает мелькающие строки, позволяя их внимательно изучить, а с другой — не удерживает (по возможности) в памяти сразу все (это может быть сло

Если вы привыкли к Виму так же, как я, то вам должна была прийти идея использовать его для просмотра выдачи на экран (точнее, на устройства stdout и stderr). Всегда можно перенаправить вывод в файл (символом >) и потом открыть файл. Например, ./this.exe > data.out

Можно использовать ключ -, который, как мы помним, предписываем воспринимать все после него как текст, а не параметры командной строки. Тогда можно перенаправлять поток в Вим: он воспримет его как текст. Например, ls | vim -. Без минуса эффект будет неприятным: вим попытается воспринять все как командную строку, и это вряд ли то, чего вы ожидаете.

Это очень удобно и я часто пользуюсь именно таким синтаксисом. Однако в поставке Вима идет скрипт, превращающий Вим в полноценный пейджер.

Пейджером в Unix называется программа, показывающая текст частями: экранами. С одной стороны, она останавливает мелькающие строки, позволяя их внимательно изучить, а с другой — не удерживает (по возможности) в памяти сразу все (это может быть сложно). Отладочная выдача для сложных программ порой занимает сотни мегабайт, а то и гигабайты. Даже Виму тяжело переваривать такие объемы.

Стандартные пейджеры носят название more и less. В среде советских юниксоидов зари эпохи это были "море" и "лес", что забавно.

Первая (more) попроще, вторая (less) имеет больше возможностей и умнее работает с памятью: о чем я и говорил. Ну, вот такие названия, что я могу поделать). Вообще, more это "больше", ну а less это "меньше". Первой появилась more, и здесь понятен смысл названия: "давай еще!". Потом появилась less как более продвинутая штука, ну ей и дали такое название.

Так что используйте синтаксис cat bigfile | less, если вам надо просмотреть по-быстрому, или сразу ищите посредством grep или perl то, что вас интересует.

Недостаток стандартного пейджера в том, что он не подсвечивает синтаксис и поддерживает очень ограниченные команды из арсенала Вим.

Вместо него можно использовать скрипт $VIMRUNTIME/macros/less.sh. Добавьте этот путь в PATH (посмотрев предварительно значение переменной окружения при запущенном Вим) или скопируйте скрипт туда, где он виден, или скопируйте в домашнюю папку и запускайте оттуда — как хотите. Запустится обычный Вим, но с рядом привязок для эмуляции команд less. Подсветка синтаксиса, фолдинг, вкладки, возможность сохранять отдельные строки в файл и все прочее — в вашем распоряжении.

Клавиша h покажет справку именно по пейджерным командам. Вот такую примерно:

-2

Вы можете настроить Вим для этих целей по-своему, определив в .vimrc функцию LessInitFunc без параметров. Пример из справки:

func LessInitFunc()
set nocursorcolumn nocursorline
endfunc

И удачи, коллеги!

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