Я использую vim, чтобы проверить страницу руководства, и есть какой-то странный персонаж, как сделать его нормальным? - PullRequest
3 голосов
/ 07 февраля 2020

Я пытаюсь с помощью

man ascii | vi -

проверить руководство ascii с помощью vim,
, тогда есть какой-то странный символ, такой как '^ H'

странный символ в vim

как сделать это нормально?

РЕДАКТИРОВАТЬ:

Я думаю, что это из-за неправильной конфигурации моего Vim или терминала, потому что я попробовал некоторые другая машина, и она отлично работает, любое тело поможет?

1 Ответ

6 голосов
/ 07 февраля 2020

Здесь вы видите соглашение man-страницы для набора текста жирным и подчеркнутым символами.

Символ ^H является символом «backspace» или BS, который вы можете найти в ascii (7) как ASCII 8.

Отображение как ^H является условным обозначением для обозначения «Control-H», каретка является символом клавиши «Control», поскольку это комбинация клавиш, которая сгенерируйте этот управляющий символ (обратите внимание, что «H» - восьмая буква, также она находится в той же строке, что и BS в диаграмме ASCII на странице man.)

Также обратите внимание, что ^H здесь представляет собой один символ а не отдельные символы ^ и H. Если вы двигаетесь вдоль этой линии с движением l несколько раз, вы увидите, что Vim пропускает H s. Vim может также отображать их в другом цвете, чтобы было ясно, что они являются специальными символами.

Эффект, который вы видите здесь, называется чрезмерным символами, и это происходит со времен, когда компьютеры будет подключен к линейным принтерам, а не к экранам. Страницы руководства были созданы в начале Unix дней и набираются с помощью программы с именем nroff (корни которой предшествуют даже Unix), которая использует эти последовательности для кодирования своих текстовых декораций, даже по сей день.

Таким образом, один из способов сделать текст жирным (или распечатать его сильнее) состоял в том, чтобы напечатать письмо, отступить на один пробел и затем напечатать его снова. В вашем примере N^HNA^HAM^HME^HE используется для печати слова NAME жирным шрифтом.

Как правило, вы будете использовать программу man pager, которая знает, как обрабатывать эти последовательности. Например, less имеет указанную поддержку c для перегруженного текста и способен распознавать эти последовательности, используя возврат на одну позицию (или возврат каретки, также возможно использовать его для этого), и преобразовывать в текст, выделенный жирным шрифтом или подчеркиванием, используя конечные escape-последовательности, которые на самом деле достичь этих эффектов в терминале.

Если вы используете другой пейджер, часто вы будете использовать col -b, чтобы убрать текст из этих последовательностей. (Подробнее см. col (1) .) Обратите внимание, что col -b не создает экранирующие последовательности терминала вокруг заштрихованного текста, он просто удаляет все зачеркивания, оставляет текст простым, поэтому любой читатель текста может его отобразить .

(В этом смысле man ascii | col -b | vi - - один из возможных способов решения вашей проблемы, но не лучший.)

Vim не поддерживает перегруженный текст или терминальные escape-последовательности в тексте, которые он получает в качестве ввода. Таким образом, подход, используемый для использования Vim в качестве man-пейджера, состоит в том, чтобы убрать все перетаскивания (как в col -b), а затем использовать функцию подсветки синтаксиса Vim для пометки разделов man-страниц и c. (Таким образом, вместо того, чтобы видеть исходные маркировки, набранные на страницах руководства, все они удаляются, и вы фактически видите конфигурацию синтаксиса Vim для страниц руководства.)

Это достигается с помощью сценария manpager.vim, который по умолчанию поставляется с Vim и регистрирует команду :MANPAGER, к которой вы можете получить доступ как vim +MANPAGER -.

Вы увидите, что часть этого действия заключается в удалении перегрузки , так же, как col -b Он также правильно устанавливает тип файла и включает подсветку синтаксиса, устанавливая Vim в качестве подходящего средства просмотра для man-страниц.

Я думаю, это связано с неправильной настройкой моего vim или терминала, потому что я попробовал его на другом компьютере, и он прекрасно работает там.

Я бы сказал, что это, скорее всего, из-за того, что man-страницы по-разному набираются между двумя системами.

Man-страницы сами по себе и конвейеры, используемые для их генерации из исходного кода, не очень однородны, и вы обнаружите различия между операционными системами или даже Linux дистрибутивами.

Возможно, что в вашей другой системе все man-страницы будут удалены использование col -b во время создания, или что man будет лишать их при конвейерной связи с чем-то, что не установлено в $MANPAGER, или даже то, что в их источниках ничего не выделено жирным шрифтом или подчеркиванием.

Трудно сказать, какой именно (ваша ссылка на работу на другой машине не содержит подробностей), но я бы поспорил.


Короче говоря: использовать Vim как пейджер для человека страниц, вместо того, чтобы отправлять их в Vim, настройте его так, чтобы man запускал vim как сам пейджер.

В Vim см. :help manpager.vim, в котором есть инструкции по как это настроить.

Короче, все, что вам нужно, это добавить эту строку в ~/.bash_profile:

export MANPAGER="vim -M +MANPAGER -"

После настройки и повторного входа в систему все, что вам нужно это:

$ man ascii

И man запустит vim в нужном для вас режиме.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...