How can I get latest version of nano (4.5) on CentOS 7?
EL 7 packages were established a few years ago, and their builds are still at 2.3 because it is a stable distro. Many repos will not replace packages from base EL.
To continue using a Red Hat RPM, consider upgrading the OS of your editor environment (could be a VM or a container).
EL 8 appears to be up to 2.9, based on the CentOS 8 nano.spec and the packages on the mirrors. Not the latest.
Fedora 30 is newer, 4.2.
Or, feel free to compile yourself, perhaps take the Fedora spec and rebuild. As usual, you take on more responsibility if building yourself.
To get Nano 4 on a CentOS 7 machine it's fairly simple.
Head to https://www.nano-editor.org/dist/v4/ and grab the latest .xz (as of February 2020, v4.8 is the latest version).
cdto a suitable directory, e.g.
Make a subdirectory to store everything:
mkdir -p /opt/apps/nano
As some people do, you can also download the matching GPG signature and verify it.
Uncompress and untar into a subdirectory named
tar -Jxvf nano-4.8.tar.xz
CD to the extracted folder and run configure:
cd nano-4.8 && ./configure.
You may need to install ncurses; read the output of
makeand it will advise you if so.
make && sudo make install
Tidy up and symlink the
nanobinary (if you didn't specify install location during configuration).
This method could be improved but overall I'm happy with it.
By default, the configure script points the eventual install to the default location of
/usr/local/bin. You can customise with the
--prefix=PREFIX (where PREFIX is an absolute file path) passed to
./configure but I don't mind the default. More info's available with
My machine doesn't include
$PATH; for an easy life you can uninstall nano 2 with
yum remove nano, or
nano2 and install a symlink if you want to keep both for reasons:
mv /bin/nano /bin/nano2
ln -s /usr/local/bin/nano /bin/nano
After doing this, note that some
.nanorc config variables have changed, so if you use
set const this needs updating to
I personally use
set softwrap set constantshow include "/usr/local/share/nano/*.nanorc"
The include enables syntax colouring and the other two are self-evident. Nano 4 now softwraps by default but I've left it in.
softwrap is beneficial, you'll avoid inadvertently inserting line breaks in files with lines breaking over the width limit).
You can define these in
~/.nanorc or do it globally via the global
nanorc file. (location varies).
The one thing I've not been able to figure out is where this global config should go - the usual paths like
/usr/local/etc, and so on, don't work.
strace -e open nano shows nano is not even attempting to open a global config file in any of the common locations. Maybe it needs another flag specified at compile time, but nothing obvious sticks out on
./configure --help though. The docs also changed after version 3 and vaguely refer to a system-wide config file whose location varies.
It seems that compiling from source by default doesn't include a global config. I just use my
~/.nanorc and include the syntax highlighting files from there, works fine. Perhaps investigating the version compiled for the repo RPM would reveal what needs changing.
A full list of options for
nanorc is available in the docs (
man nanorc or at https://www.nano-editor.org/dist/v4/nanorc.5.html).
Some other syntax highlighting notes are worth reading on https://www.mc-guinness.co.uk/blog/20160307/configuring-nano-text-editor-in-ubuntu/ and a few other posts on SE, AskUbuntu etc.
Edit, Feb 2020: I've used scopatz' syntax highlighting auto-install script in 'lite' mode (
sh -l instead of
sh in the one-liner): https://github.com/scopatz/nanorc . Other syntax highlighting packs are available.
I also had to comment out
set const as that particular syntax is deprecated, and nano 4 softwraps by default. As of nano 2.7 the syntax changed to
set constantshow anyway.