Может ли nano определять тип файла без расширения с помощью шебанга, чтобы иметь правильную подсветку синтаксиса? - PullRequest
0 голосов
/ 03 мая 2019

Я вижу, nano не может определить тип файла по линии shebang (hashbang), например

#!/usr/bin/env bash

или аналогичный.

Vim справляется с этой задачей без проблем.

enter image description here

Есть ли способ заставить его работать на nano?

P.S. Создан выпуск github .

P.P.S. Даже версия nano 4.2 не поддерживает это. (составлено из источников на CentOS7)

1 Ответ

0 голосов
/ 03 мая 2019

Я решил сделать для этого простую оболочку.

#!/usr/bin/env bash
####################################################
# Find file type and set syntax highlight for nano #
####################################################

set -o pipefail
set -o errexit
set -o nounset
#set -o xtrace

# Determine path to nano binary file
if [[ -f /usr/local/bin/nano ]]; then
  nano_bin=/usr/local/bin/nano
elif [[ -f /usr/bin/nano ]]; then
  nano_bin=/usr/bin/nano
else
  echo 'error: Sorry, nano binary file not found neither by path /usr/local/bin/nano nor /usr/bin/nano.' > /dev/stderr
  exit 2
fi

# check if syntax highlight argument already passed
if ! echo ${@} | grep -E '(-Y|--syntax)' > /dev/null; then
  # fetch interpreter name
  syntax_type=$(head -1 bin/cli | grep '#!' | awk '{match($0,"([a-z]+)$",a)}END{print a[0]}')

  if [[ -n "${syntax_type}" ]]; then
    # map a file interpreter onto syntax type like BASH into SH
    case "${syntax_type}" in
      bash)
        syntax_type=sh
        ;;
    esac

    nano_argument="--syntax=${syntax_type}"
  fi
fi

${nano_bin} ${nano_argument:-} ${@}

Установка

Простая опция для bash

Скопировать код в ~ / .nano-wrap.sh

nano ~/.nano-wrap.sh

Добавьте псевдоним в ваш файл .bashrc:

echo 'alias nano="bash ~/.nano-wrap.sh" >> ~/.bashrc'

и перезагрузите его:

source ~/.bashrc

J

...