Вопрос или проблема
Этот вопрос касается “bat”, замените “cat” с подсветкой синтаксиса, не оконных .bat файлов.
Согласно README на странице GitHub bat, а также странице man, я должен запустить bat cache --build
, когда хочу добавить новое определение синтаксиса. Но когда я это делаю, я получаю следующую ошибку:
ошибка: неожиданный аргумент '--build'
.
Попытка запустить просто bat cache
выдает
[bat ошибка]: ‘cache’: Нет такого файла или директории (ошибка в ОС 2)
но, к сожалению, не уточняет, какой файл он ожидал найти. Я предполагаю, что у него есть проблемы с созданием кеша в первый раз.
-
Ваша версия
bat
обновлена? -
Упоминает ли
bat --help
, что вы можете использоватьbat cache
? -
Существует ли файл с именем
cache
в текущей директории? Если да, попробуйте перейти в другую директорию.
Ожидаемый результат:
[deuterium ~]$ wget 'https://github.com/sharkdp/bat/releases/download/v0.23.0/bat-v0.23.0-x86_64-unknown-linux-gnu.tar.gz'
[deuterium ~]$ tar xvf bat-v0.23.0-x86_64-unknown-linux-gnu.tar.gz
[deuterium ~]$ cd bat-v0.23.0-x86_64-unknown-linux-gnu/
[deuterium ~/bat-v0.23.0-x86_64-unknown-linux-gnu]$ ./bat --help
Клон cat(1) с подсветкой синтаксиса и интеграцией с Git.
Использование: bat [ОПЦИИ] [ФАЙЛ]...
bat <КОМАНДА>
Аргументы:
[ФАЙЛ]...
Файл(ы), которые следует вывести / конкатенировать. Используйте дефис ('-') или вовсе не указывайте аргумент, чтобы прочитать из
стандартного ввода.
Опции:
-A, --show-all
Показать непечатаемые символы, такие как пробел, табуляция или новая строка. Эта опция также может быть использована для
вывода бинарных файлов. Используйте '--tabs', чтобы контролировать ширину табуляции.
--nonprintable-notation <notation>
Установить нотацию для непечатаемых символов.
Возможные значения:
* unicode (␇, ␊, ␀, ..)
* caret (^G, ^J, ^@, ..)
-p, --plain...
Показывать только простой стиль, без украшений. Это псевдоним для '--style=plain'. Когда '-p' используется дважды ('-pp'), это также отключает автоматическую страничную разбивку (псевдоним для '--style=plain --paging=never').
-l, --language <language>
Явно установить язык для подсветки синтаксиса. Язык можно указать как имя (например, 'C++' или 'LaTeX') или возможное расширение файла (например, 'cpp', 'hpp' или 'md'). Используйте '--list-languages', чтобы показать все поддерживаемые языковые названия и расширения файлов.
-H, --highlight-line <N:M>
Выделите указанные диапазоны строк другим цветом фона. Например:
'--highlight-line 40' выделяет строку 40
'--highlight-line 30:40' выделяет строки с 30 по 40
'--highlight-line :40' выделяет строки с 1 по 40
'--highlight-line 40:' выделяет строки с 40 до конца файла
'--highlight-line 30:+10' выделяет строки с 30 по 40
--file-name <name>
Укажите имя для отображения файла. Полезно, когда данные передаются в bat из STDIN, когда bat
не знает имя файла. Обратите внимание, что предоставленное имя файла также используется для
определения синтаксиса.
-d, --diff
Показать только строки, которые были добавлены / удалены / изменены по отношению к индексу Git. Используйте
--diff-context=N, чтобы контролировать, сколько контекста вы хотите видеть.
--diff-context <N>
Включить N строк контекста вокруг добавленных / удаленных / измененных строк при использовании '--diff'.
--tabs <T>
Установить ширину табуляции в T пробелов. Используйте ширину 0, чтобы пропустить табуляцию напрямую.
--wrap <mode>
Указать режим обертывания текста (*auto*, never, character). Опция '--terminal-width'
может использоваться дополнительно для контроля ширины вывода.
-S, --chop-long-lines
Укоротить все строки длиннее ширины экрана. Псевдоним для '--wrap=never'.
--terminal-width <width>
Явно установить ширину терминала, вместо автоматического определения. Если
с префиксом '+' или '-', значение будет считаться смещением от фактической ширины терминала. Смотрите также: '--wrap'.
-n, --number
Показывать только номера строк, без других украшений. Это псевдоним для '--style=numbers'.
--color <when>
Указать, когда использовать цветной вывод. Автоматический режим включает цвета только если обнаружен интерактивный терминал - цвета автоматически отключаются, если вывод идет в пайп.
Возможные значения: *auto*, never, always.
--italic-text <when>
Указать, когда использовать ANSI последовательности для курсивного текста в выводе. Возможные значения: always,
*never*.
--decorations <when>
Указать, когда использовать украшения, которые были указаны через '--style'. Автоматический
режим включает украшения только если обнаружен интерактивный терминал. Возможные значения:
*auto*, never, always.
-f, --force-colorization
Псевдоним для '--decorations=always --color=always'. Это полезно, если вывод bat
передается в другую программу, но вы хотите сохранить цветовую разметку / украшения.
--paging <when>
Указать, когда использовать постраничный вывод. Чтобы отключить постраничный вывод, используйте --paging=never' или его
псевдоним, '-P'. Чтобы отключить постраничный вывод навсегда, установите BAT_PAGER в пустую строку. Чтобы управлять
каким постраничным выводом используется, смотрите опцию '--pager'. Возможные значения: *auto*, never, always.
--pager <команда>
Определяет, какой постраничный вывод используется. Эта опция переопределяет переменные среды PAGER и BAT_PAGER.
Порядок по умолчанию - 'less'. Чтобы контролировать, когда используется постраничный вывод, см. опцию '--paging'. Пример: '--pager "less -RF"'.
-m, --map-syntax <glob:syntax>
Связывает шаблон glob с существующим именем синтаксиса. Шаблон glob сопоставляется по полному
пути и имени файла. Например, чтобы выделить файлы *.build с синтаксисом Python, используйте
-m '*.build:Python'. Чтобы выделить файлы с именем '.myignore' с синтаксисом Git Ignore, используйте
-m '.myignore:Git Ignore'. Обратите внимание, что правая сторона является *именем* синтаксиса, а не
расширением файла.
--ignored-suffix <ignored-suffix>
Игнорировать расширение. Например:
'bat --ignored-suffix ".dev" my_file.json.dev' будет использовать синтаксис JSON и игнорировать '.dev'.
--theme <theme>
Установить тему для подсветки синтаксиса. Используйте '--list-themes', чтобы увидеть все доступные темы. Чтобы
установить тему по умолчанию, добавьте опцию '--theme="..."' в файл конфигурации или экспортируйте
переменную окружения BAT_THEME (например, export BAT_THEME="...").
--list-themes
Показать список поддерживаемых тем для подсветки синтаксиса.
--style <components>
Настроить, какие элементы (номера строк, заголовки файлов, границы сетки, изменения Git и т.д.)
отображать, помимо содержимого файла. Аргумент - это запятая, разделенный список
компонентов для отображения (например, 'numbers,changes,grid') или предопределенный стиль ('full'). Чтобы
установить стиль по умолчанию, добавьте опцию '--style=".."' в файл конфигурации или экспортируйте
переменную окружения BAT_STYLE (например, export BAT_STYLE="..").
Возможные значения:
* default: включает рекомендуемые компоненты стиля (по умолчанию).
* full: включает все доступные компоненты.
* auto: то же самое, что и 'default', если вывод не поступает в пайп.
* plain: отключает все доступные компоненты.
* changes: показывает маркеры изменений Git.
* header: псевдоним для 'header-filename'.
* header-filename: выводит имена файлов перед содержимым.
* header-filesize: выводит размеры файлов перед содержимым.
* grid: вертикальные/горизонтальные линии для разделения боковой панели
и заголовка от содержимого.
* rule: горизонтальные линии для разграничения файлов.
* numbers: показывает номера строк в боковой панели.
* snip: рисует линии разделения между различными диапазонами строк.
-r, --line-range <N:M>
Печатает только указанный диапазон строк для каждого файла. Например:
'--line-range 30:40' печатает строки с 30 по 40
'--line-range :40' печатает строки с 1 по 40
'--line-range 40:' печатает строки с 40 до конца файла
'--line-range 40' печатает только строку 40
'--line-range 30:+10' печатает строки с 30 по 40
-L, --list-languages
Показать список поддерживаемых языков для подсветки синтаксиса.
-u, --unbuffered
Эта опция существует по причинам соответствия POSIX ('u' означает 'unbuffered'). Вывод
всегда небуферизуется - эта опция просто игнорируется.
--diagnostic
Показать диагностическую информацию для отчетов об ошибках.
--acknowledgements
Показать благодарности.
-h, --help
Печать справки (см. краткий обзор с помощью '-h')
-V, --version
Печать версии
Вы можете использовать 'bat cache', чтобы настроить синтаксисы и темы. Смотрите 'bat cache --help' для получения дополнительной информации.
[deuterium ~/bat-v0.23.0-x86_64-unknown-linux-gnu]$ ./bat cache --help
Изменить кеш определения синтаксиса и темы
Использование: bat cache [ОПЦИИ] <--build|--clear>
Опции:
-b, --build
Инициализировать (или обновить) кеш синтаксиса / темы, загружая из исходной директории
(по умолчанию: директория конфигурации).
-c, --clear
Удалить закешированные определения синтаксиса и темы.
--source <dir>
Используйте другую директорию для загрузки синтаксиса и тем.
--target <dir>
Используйте другую директорию для хранения закешированного набора синтаксиса и тем.
--blank
Создайте совершенно новые наборы синтаксиса и тем (вместо добавления к набору по умолчанию).
--acknowledgements
Создать acknowledgements.bin.
-h, --help
Печать справки (см. краткий обзор с помощью '-h')
[deuterium ~/bat-v0.23.0-x86_64-unknown-linux-gnu]$ ./bat cache --build
Темы не были найдены в '/home/user/.config/bat/themes', используется набор по умолчанию.
Синтаксисы не были найдены в '/home/user/.config/bat/syntaxes', используется набор по умолчанию.
Запись набора тем в /home/user/.cache/bat/themes.bin ... хорошо
Запись набора синтаксиса в /home/user/.cache/bat/syntaxes.bin ... хорошо
Запись метаданных в папку /home/user/.cache/bat ... хорошо
[deuterium ~/bat-v0.23.0-x86_64-unknown-linux-gnu]$ ./bat --version
bat 0.23.0 (871abd2)
[deuterium ~/bat-v0.23.0-x86_64-unknown-linux-gnu]$ ./bat foo
[bat ошибка]: 'foo': Нет такого файла или директории (ошибка в ОС 2)
Это должно работать без предварительного создания ~/.config/bat.
Краткий ответ: У вас (вероятно) есть конфликтующий псевдоним
Запустите command bat cache --build
или /usr/bin/bat cache --build
.
У меня были точно(!) такие же две проблемы.
Есть большая вероятность, что у вас есть псевдоним bat в вашей системе, как у меня, который конфликтует с bat cache
. У меня был bat="bat --color=always"
. bat тогда ожидает, что будет передан файл, вот и ошибка 'cache': Нет такого файла или директории (ошибка в ОС 2)
.
Ответ или решение
Проблема, с которой вы столкнулись, заключается в том, что команда bat cache --build
выдаёт ошибку unexpected argument '--build' found
. Это может происходить по нескольким причинам, но наиболее вероятной является конфликт с алиасом, установленным в вашей системе.
Описание проблемы
При вызове команды bat cache --build
, программа ожидает, что аргументы будут переданы именно в формате, предусмотренном для этой команды. Если у вас есть алиас (например, bat="bat --color=always"
), это может создать конфликты, поскольку алиас будет пытаться дополнительно передать аргументы, которые не ожидаются для команды cache
. Также сообщение об ошибке cache: No such file or directory (os error 2)
подразумевает, что bat пытается интерпретировать cache
как файл, что также может быть следствием используемого алиаса.
Решение
-
Проверьте алиасы: Введите команду
alias
в терминале, чтобы просмотреть все установленные алиасы. Найдите алиас дляbat
. Если он установлен, его необходимо изменить или удалить. Например, чтобы удалить алиас, используйте:unalias bat
-
Запустите bat без алиаса: Если вы не хотите удалять алиас, вы можете запустить команду без алиаса с помощью:
command bat cache --build
или указав полный путь к исполняемому файлу:
/usr/bin/bat cache --build
-
Обновите bat: Убедитесь, что у вас установлена последняя версия
bat
. Иногда устаревшая версия может не поддерживать определённые функции. Чтобы обновить bat, выполните:sudo apt update sudo apt install bat
(или эквивалентные команды для вашей дистрибуции).
-
Проверка документации: Используйте команду
bat --help
иbat cache --help
, чтобы удостовериться, что синтаксис команды соответствует ожидаемому. Убедитесь, что вы видите параметры--build
в выводе командыbat cache --help
. -
Создание директорий конфигурации: Если у вас не были созданы директории
~/.config/bat
, попробуйте их создать вручную:mkdir -p ~/.config/bat/syntaxes ~/.config/bat/themes
Заключение
После выполнения этих шагов команда bat cache --build
должна работать без ошибок. Если проблемы сохраняются, проверьте наличие других конфигураций или установленных пакетов, которые могли бы нарушать работу bat
.