Can nano do syntax highlighting like gedit and vim? How can I enable it? I need at least bash and python syntax highlights.
15 Answers
The nano editor provides syntax highlighting for a few languages and scripts by itself. Check out /usr/share/nano/
nits@nits-excalibur:~$ ls /usr/share/nano/
asm.nanorc fortran.nanorc man.nanorc ocaml.nanorc ruby.nanorc
awk.nanorc gentoo.nanorc mgp.nanorc patch.nanorc sh.nanorc
c.nanorc groff.nanorc mutt.nanorc perl.nanorc tcl.nanorc
cmake.nanorc html.nanorc nano-menu.xpm php.nanorc tex.nanorc
css.nanorc java.nanorc nanorc.nanorc pov.nanorc xml.nanorc
debian.nanorc makefile.nanorc objc.nanorc python.nanorc
Link them to your user's nano configuration file (present at ~/.nanorc
, ${XDG_CONFIG_HOME}/nano/nanorc
, or ~/.config/nano/nanorc
, whichever is encountered first) with something similiar to this line:
nits@nits-excalibur:~$ cat ~/.nanorc
include /usr/share/nano/sh.nanorc
Now, syntax highlighting is enabled in nano for whatever file you linked (You could also link multiple files)
Note: Sometimes you might get a segmentation fault
after you have edited your ~/.nanorc
file. If such an error occurs, unsetting the LANG environment variable helps. You can unset it with unset LANG
in the terminal. (Solution obtained from here)
There are also other solutions if you are not satisfied with your bash highlighting. One example of such can be found here
You can also write include /usr/share/nano/*
to the ~/.nanorc file to enable all languages to be highlighted if your nano version supports it.
-
19
-
3Wait, wait, how come the global setting with all the
include
lines not enabling syntax highlights even though I have not.nanorc
?– OxwiviCommented Dec 23, 2011 at 16:53 -
3To enable syntax highlighting when editing a file with an unrecognised filename extension (such as
~/.bashrc
), you can use the--syntax
option. For example:nano --syntax=sh ~/.bashrc
Commented Jan 27, 2015 at 13:57 -
21
ls -1 /usr/share/nano/*.nanorc | sed 's/^\//include \//' >> ~/.nanorc
append them all to your .nanorc file, or create it if it does not exist. Commented Feb 8, 2016 at 0:10 -
12
Yes you can, however the default syntax definitions are quite poor and incomplete. I'm maintaining a more accurate set of definitions here, for anyone who finds them useful.
To install, run:
git clone https://github.com/scopatz/nanorc.git
cd nanorc
make install
Add these lines to the ~/.nanorc
include ~/.nano/syntax/html.nanorc
include ~/.nano/syntax/css.nanorc
include ~/.nano/syntax/php.nanorc
include ~/.nano/syntax/ALL.nanorc
Specify the ones you want to have colorizing for, and you will have to tune these colors to your preferences. The ALL.nanorc
describes features for all yet unclassified files. These are the tools you need to get started, not the end polished product.
-
3My *.js files weren't working...edited /etc/nanorc to remove any other syntax includes as per the FAQ github.com/nanorc/…. ♥ Nano ♥ nanorc– CarltonCommented Aug 6, 2014 at 12:27
-
5I just installed your syntax defs on Mac OSX. There's only one thing I'd note, which is the black colour of the open-bracket in python gets lost against the black background of my terminal Commented Aug 27, 2014 at 14:25
-
5Actually there is a problem, some of the colored text is black! If our terminal background is black, these words are invisible!– dukevinCommented Dec 8, 2014 at 3:20
-
2thanks for your hard work! you should get this into the upstream repo, IMHO Commented Jan 14, 2015 at 17:27
-
1+druciferre provides a great command below that adds all syntax files automatically to your .nanorc file. I changed the path to point to your default install location:
find $HOME/.nano/syntax/ -iname "*.nanorc" -exec echo include {} \; >> ~/.nanorc
Commented Sep 3, 2015 at 17:26
I used this command to quickly enable all available languages.
find /usr/share/nano/ -iname "*.nanorc" -exec echo include {} \; >> ~/.nanorc
As mentioned in other answers, /usr/share/nano/
contains the definitions for different languages.
$ ls /usr/share/nano
asm.nanorc fortran.nanorc man-html ocaml.nanorc ruby.nanorc
awk.nanorc gentoo.nanorc man.nanorc patch.nanorc sh.nanorc
cmake.nanorc groff.nanorc mgp.nanorc perl.nanorc tcl.nanorc
c.nanorc html.nanorc mutt.nanorc php.nanorc tex.nanorc
css.nanorc java.nanorc nanorc.nanorc pov.nanorc xml.nanorc
debian.nanorc makefile.nanorc objc.nanorc python.nanorc
Also mentioned, to enable highlighting for a language, you add include
and the path to the language definition you want to enable to your ~/.nanorc
file. So, for example, to enable C/C++ you would add this line.
include /usr/share/nano/c.nanorc
The find
command searches for files or directories within the specified directory.
- The
-iname
flag tells it to only look for files with a name that ends with.nanorc
. - The
-exec
flags defines a command to execute on each file found. - The
{}
gets replaced with the file name. \;
is used to signify the end of the command to execute to thefind
command.- Lastly,
>> ~/.nanorc
causes the output to be appended to your~/.nanorc
file.
-
1
-
Thanks and doesn't look like you need the iname flag. The following seems to work as well find /usr/share/nano/*.nanorc– MilindCommented Feb 17, 2019 at 0:06
-
1I realize this is an old question, but I just added this to my puppet configuration and would make one small addition, adding sort before appending to the file. find /usr/share/nano/ -iname "*.nanorc" -exec echo include {} \; || sort >> ~/.nanorc this will make it easier to see if you have language support or not when adding a new language. Commented Sep 29, 2021 at 22:12
This should include all the syntax highlighting plugins included by default, and any you add to /usr/share/nano:
find /usr/share/nano -name '*.nanorc' -printf "include %p\n" > ~/.nanorc
Or, edit /etc/nanorc and see if you can uncomment the includes.
This works if you have a version of nano that refuses to accept wildcards in the .nanorc file.
Just run this line every time you add an additional .nanorc colour config.
-
IMHO that's not a good solution, because this eliminates all the settings from the users current
.nanorc
by overwriting it. Commented Dec 27, 2022 at 11:38
You can use this to include all: (add this to ~/.nanorc
file)
include "/usr/share/nano/*.nanorc"
Happy coding!
-
2
I accidentally disabled highlighting using the keyboard shortcut Alt+Y. It can be turned on again with the same keyboard shortcut.
I thought I might suggest something more fresh and up-to-date as of almost 2020 :
Scopatz's nanorc on Git has all you need. it is still regularly updated.
and is delivered with a pretty neat install guide & documented installer that allows you to get things rolling fast, clean, & easy.
Note : You might have to drop some of the highlighters from the nanorc file or comment them out (etc-host, html, and html.j2) as they seem to be faulty, but no big deal
For those who are having trouble after following the instructions above, also check if you have duplicate definitions. These will disable all syntax highlighting for all files. I ran into this after adding a nanorc.nanorc
file, and not realising that my ~/.nanorc
already had an identical section, i.e.:
## Here is an example for nanorc files.
##
syntax "nanorc" "\.?nanorc$"
## Possible errors and parameters
icolor brightwhite "^[[:space:]]*((un)?set|include|syntax|i?color).*$"
## Keywords
icolor brightgreen "^[[:space:]]*(set|unset)[[:space:]]+(autoindent|backup|$
icolor green "^[[:space:]]*(set|unset|include|syntax)\>"
(...)
I know it is an old thread but may my solution can help
edit the file at /etc/nanorc
From the line 243 you can find lot include files. Simply uncomment the ones you need, save and done.
## Nanorc files
include "/usr/share/nano/nanorc.nanorc"
## C/C++
include "/usr/share/nano/c.nanorc"
## Makefiles
include "/usr/share/nano/makefile.nanorc"
## Cascading Style Sheets
include "/usr/share/nano/css.nanorc"
## Debian files
include "/usr/share/nano/debian.nanorc"
## Gentoo files
# include "/usr/share/nano/gentoo.nanorc"
I am not sure if you update nano will these changes vanished.
Edit: outdated, please refer to other answers
The most complete and up to date syntax hilighters for nano are maintained here
To install all highlighters for your user just run:
cd /tmp
git clone https://github.com/tech4david/nano-highlight.git
cd nano-highlight/
make install
echo "include ~/.nano/syntax/ALL.nanorc" >> ~/.nanorc
-
The solution is good, but I would use an other folder for
git clone
. The content otf the/tmp
folder will be deleted on every system start and therefore you could never run agit pull
.– A.B.Commented Jul 30, 2015 at 8:00 -
Your language tag is wrong.
js
isn'tbash
orshell-script
and I have placed the link behind the wordhere
. Where is the problem?– A.B.Commented Jul 30, 2015 at 8:19 -
2@A.B. it doesn't matter if that folder is gone since when you
make install
all the syntax files are copied to the safe place where they belong:~/.nano/syntax
. Commented Oct 14, 2017 at 21:06 -
Project is now archived. Not maintained anymore. Commented Jan 12, 2023 at 23:48
nano ~/.nanorc
just write below code i
include "/usr/share/nano/*.nanorc"
set linenumbers
To add support for TypeScript JSX (.tsx) files do the following:
- Open ~/.nanorc file and find "javascript" slug using ctrl+w in nano editor
- You should find something like
include /Users/youruser/nanorc/javascript.nanorc
, open this .nanorc file - On the first line edit
syntax "JavaScript" "\.(js|ts)$"
tosyntax "JavaScript" "\.(js|ts|jsx|tsx)$"
to include .jsx and .tsx file extensions
wget -r -nH --cut-dirs=3 --no-parent --reject="index.html*" https://nanosyntax.googlecode.com/svn/trunk/syntax-nanorc/ -P ~/.nano-syntax
for i in `ls --color=never -1 ~/.nano-syntax/*.nanorc` ; do echo "include $i" >> ~/.nanorc ; done
-
26It would be helpful if you could explain why this is a useful answer for newer users. What is the command doing? What does it change? Randomly suggesting to run a command line is not helpful. Commented Jun 28, 2013 at 3:10
I found syntax highlighting for js here.
I appended it into my user file at ~/.nanorc
However to get a file into which I could append, I had to first copy from /usr/share/nano/nanorc.nanorc
to my local folder first as ~/.nanorc
.
For those who have working and included *.nanorc
files but still see a monochrome text (or maybe regular and bold, use Alt+Y while editing to toggle syntax highlighting), it may be your TERM environment variable is not recognized. I had it set to xterm-256color
but on that particular host that value didn't use color in nano for whatever reason.. doing $ TERM=screen
worked for me.
You can see what it currently is with $ echo $TERM
.