在 Mac OS X 上更改 Nano 的默认版本

在 Mac OS X 上更改 Nano 的默认版本

执行时,我的 Mac OS X 终端默认安装了 nano 2.0.6 nano。在 中安装了 nano 2.9.1 /usr/local/Cellar/nano/2.9.1/bin/nano

如何nano在终端中将默认版本更改为 2.9.1?

我正在运行 Mac OS X 10.13.1。

答案1

这是另一个答案很好,尤其是作为临时替代。为了完整起见,这是它的要点:

export PATH="/usr/local/Cellar/nano/2.9.1/bin:$PATH"

问题是:如果您需要多个工具的永久解决方案,那么这种简单的方法$PATH将不必要地导致膨胀。

这是避免这种情况的方法(在 Debian 上;问题是针对 Mac OS X 的,但我相信该解决方案也适用或可以轻松适应)。首先创建自己的bin/

mkdir ~/bin/

(编辑:在 macOS 上,~/Library/bin/更适合主文件夹组织。但我决定不改变我的答案,而是根据您的需要调整此路径。)

接下来修改您的$PATH

PATH=~/bin:"$PATH"

(看注1如果您想将其永久保留,请在下面进行操作。)

然后将所需的nano(和任何其他二进制文件)符号链接到您的自定义bin/

ln -s /usr/local/Cellar/nano/2.9.1/bin/nano ~/bin/

(看笔记2如果您想nano立即使用,请参见下面的内容。)

这种方法具有以下优点:

  • 您的$PATH住宿时间相对较短且干净;
  • ls -l ~/bin/可以轻松分辨出您用什么工具覆盖了哪些工具;这比分析指定目录的臃肿文件要好得多$PATH;每个目录可能包含许多可执行文件,无论如何您都需要ls了解它们;
  • 删除符号链接并重新创建它比修改要容易得多$PATH,尤其是在脚本内部;
  • 您还可以在其中放置自己的脚本~/bin/

注1:在我的Debian中/etc/skel/.profile包含以下代码:

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
    PATH="$HOME/bin:$PATH"
fi

我的~/.profile是作为的副本创建的/etc/skel/.profile,因此代码从一开始就在那里。这意味着每个新的 shell 会话都会调整其$PATH以包含我的私有bin/;我所要做的就是创建目录。


注意 2:$PATH在会话中间进行修改时(例如,为了测试我的解决方案),请记住,您的 shell 可能会记住它已经根据旧文件查找过的任何可执行文件的旧位置$PATH。常见的 shell 使用hash内置用于管理此内容。hash -r如有需要请使用。

如果您$PATH在 shell 会话一开始就进行自定义(例如.profile),那么就不会出现这样的问题。

答案2

/usr/local/Cellar/nano/2.9.1/bin/nano您可以创建从到的符号链接/usr/local/bin

ln -s /usr/local/Cellar/nano/2.9.1/bin/nano /usr/local/bin/nano

或者您可以创建一个别名。

alias nano=/usr/local/Cellar/nano/2.9.1/bin/nano

答案3

似乎:

export PATH="/usr/local/Cellar/nano/2.9.1/bin:$PATH"

成功了。

答案4

也可以将其添加到你的 .bashrc/.zshrc/etc

function nano {
    local nano_ver=$(l /usr/local/Cellar/nano/)
    /usr/local/Cellar/nano/$nano_ver/bin/nano $1
}

具有语法高亮功能的完美函数是:

function nano {
    local nano_ver=$(l /usr/local/Cellar/nano/)
    if [ ! -f  ~/.nanorc ]; then
        touch ~/.nanorc
    else
        truncate -s 0 ~/.nanorc
    fi
    echo "include /usr/local/Cellar/nano/$nano_ver/share/nano/*.nanorc" >> ~/.nanorc
    /usr/local/Cellar/nano/$nano_ver/bin/nano $1
}

相关内容