Мне было интересно, можно ли будет запускать собственные команды поверх less
команды. Под этим я подразумеваю возможность открыть файл less
и затем запустить какую-то свою команду поверх того, что я вижу (или даже над всем файлом, если это необходимо), сохраняя при этом экран таким, какой он есть. Например, я хотел бы иметь возможность запускать различные скрипты, которые будут раскрашивать то, что я вижу в данный момент, разными способами или показывать/скрывать определенные строки в файле.
Я знаю, что могу каждый раз делать что-то новое, cat <file> | my-script | less -R
но это не дает мне того опыта, который less
дает редактор.
решение1
Вы можете использовать |
команду в less для передачи файла через другую программу.
- Нажимать
|
. - Введите букву знака или
^
или$
или.
. - Введите команду оболочки для выполнения.
- Нажимать Enter.
Только часть файла между текущей позицией и меткой передается по конвейеру. Метка может быть либо ^
или , $
что означает начало и конец файла соответственно, либо позиция, заданная командой m
. Текущая позиция — это строка на экране, если метка находится перед ней, и строка внизу экрана в противном случае. В частности, чтобы передать по конвейеру весь файл, используйте <|$mycommand
или , >|^mycommand
чтобы установить позицию на один конец файла, а метку — на другой конец. Чтобы передать по конвейеру только те строки, которые отображаются на экране, используйте метку .
.
Вывод команды не останется на экране; если вы хотите просмотреть вывод с помощью less, вам нужно будет запустить другой экземпляр, например rot13 | less
. Когда вы выйдете из второго экземпляра less, вы вернетесь к первому. Невозможно заменить содержимое текущего экземпляра данными, переданными из него. Чтобы увидеть цвета, не забудьте запустить less -R
.