Как автоматически -определить тип файла в pastebinit?

:readявляется командой Ex ; к сожалению, они всегда работают с полными строками .Вам либо нужно обойти это, сначала разделив, а затем соединив с предыдущей и последующей строками, либо вы используете другую команду.

Команда:help i_CTRL-Rможет вставить любое содержимое регистра. Существует специальный регистр выражений (:help quote=), который выполняет любое выражение Vimscript и использует его результат. Наконец, функцияsystem()выполняет внешнюю команду и возвращает результат.

Итак, (в режиме вставки)=system('uuidgen')вставит вывод команды в текущую позицию. К сожалению, вывод имеет завершающую новую строку, и она сохраняется, поэтому перемещается на следующую строку. Чтобы избежать этого, вы можете обрезать вывод либо через system('uuidgen')[0:-2], либо через substitute(system('uuidgen'), '\n$', '', '')в качестве выражения.

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

0
14.01.2021, 15:46
1 ответ

Не существует автоматического инструмента, который всегда может определить тип данный файл, просто взглянув на его содержимое или имя. fileи другие подобные инструменты могут просто принять обоснованное предположение, которое не обязательно всегда правильно, потому что некоторые форматы файлов могут перекрываться (забавный факт -Лог-файлы пакетов Slackware Linux раньше распознавались как Quake. файлы по файл)или потому, что некоторые форматы файлов недостаточно специфичны, чтобы их можно было легко отличим от других форматов файлов (весь смысл Markdown заключалась в том, чтобы сделать файлы.md похожими на обычные текстовые файлы ).

В вашем примере все файлы, кроме .bashrc, имеют разные расширение, чтобы вы могли написать сценарий, который мог бы использовать их для идентификации тип, но вы должны помнить, что в *nix-системах расширения файлов имеют значение только для некоторых программ, и это ядро ​​не волнует. Для например, создайте script.shсценарий оболочки:

$ cat << EOF > script.sh
> #!/usr/bin/env bash
>
> echo hi
> EOF

Установите исполняемый бит и запустите его:

$ chmod +x./script.sh
$./script.sh
hi

Переименуйте его в script.mdи запустите:

$ mv./script.sh./script.md
$./script.md
hi

Как видите, мы можем запустить его даже после переименования в script.md.

Было бы справедливо использовать инструмент, который угадывает тип файла на основе на расширение имени файла на любом современном языке, таком как Python или Баш. Вот пример whatisthis.shв Bash:

#!/usr/bin/env bash

if [ ! $# -eq 1 ]
then
    printf "Usage: %s file_with_extension\n" "$0" >&2
    exit 1
fi

ext="$(rev <<< "$1" | cut -d. -f1 | rev)"

declare -A extensions=(
    [c]=C
    [py]=Python
    [md]=Markdown
    [cpp]=Cpp
)

printf "%s\n" "${extensions["$ext"]}"

Использование:

$./whatisthis.sh README.md
Markdown
$./whatisthis.sh main.py
Python
$./whatisthis.sh main.c
C

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

Когда дело доходит до .bashrc, его можно определить по fileпосле добавление#!/usr/bin/env bash-добавление не сломает его, потому что когда он создается каждой новой интерактивной оболочкой и каждой строкой, которая начинается с #рассматривается как комментарий.

Подводя итог, -не существует способа автоматического -определения типа файла. К лучшему результаты, которые вы должны объединить fileи посмотреть на расширение файла, но на в конце концов, пользователь всегда должен знать, что назначение данного файла.

1
18.03.2021, 22:37

Теги

Похожие вопросы