nano是否可以通过Shebang扩展名来检测文件类型而不进行扩展?

时间:2019-05-03 10:04:18

标签: syntax-highlighting shebang nano

我看到nano不能通过类似shebang(hashbang)的行来检测文件类型

#!/usr/bin/env bash

或类似的

Vim可以解决这个问题而没有问题。

enter image description here

有没有办法使它适用于nano

P.S。已创建github issue

P.P.S。甚至nano 4.2版本也不支持此功能。 (从CentOS7上的来源编译)

3 个答案:

答案 0 :(得分:1)

.sh 文件的 nano 语法高亮检测存在一个错误,我发现它存在于 nano 4.8 中,而不存在于 nano 2.9.8 中,其中 #! 行与 /env不会检测到除 sh 之外的任何 shell。

我什至找到了修复它的特定提交:https://git.savannah.gnu.org/cgit/nano.git/commit/?id=6a3ba2ab501c138c7ee1e72d2a65cea77342a43c

令人讨厌的是,在撰写本文时,这会影响最新版本的 Ubuntu (20.04) 上最新版 nano 中的 .sh 颜色语法突出显示。

要修复它,您必须用来自较新(或较旧!)nano 版本的相同文件替换 /usr/share/nano/sh.nanorc

当前来自 https://git.savannah.gnu.org/cgit/nano.git/tree/syntax/sh.nanorc 的工作正常。

答案 1 :(得分:0)

我决定为此做一个简单的包装。

#!/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

答案 2 :(得分:0)

我发现保存文件(Ctrl+O,输入名称,Enter)会导致 nano从shebang自动检测文件类型,然后从那时起适当地语法突出显示文件。