How do I enable syntax highlighting in nano?

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 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)

screenshot of syntax highlighting

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.


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.


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 the find command.
  • Lastly, >> ~/.nanorc causes the output to be appended to your ~/.nanorc file.