an atonement of nano
for years nano has been nothing but a mockery for those who use emacs
or vim. a friendly and pragmatic editor? what a laughable prospect.
well this is where it ends. nano is a friendly and pragmatic editor,
but it's no notepad. nano has depth. let's take a look.
indentation
we'll start with something simple. nano can be set to vi-like auto
indentation with M-I. Here M refers to the alt key, and I refers to an
unshifted i. with this enabled, nano will copy any whitespace from the
beginning of the current line onto the next line when you hit return.
you can make this permanent by adding "set autoindent" to you
$XDG_CONFIG_HOME/nano/nanorc file.
searching
i just want to clear up searching, as i've seen a few people have
trouble with the bindings. ^W initiates a forward search and prompts
you for a string. ^Q initiates a search backwards in the same way. M-W
and M-Q move forwards and backwards through the search occurences.
searching wraps.
backups
some people say backups are unnecessary if you use version control. i
say that they have different uses. here's what you need:
set backup
set backupdir "~/.cache/nano/backups"
every time you save, a new backup is added. maybe you won't use them.
backups have saved me before.
linting
nano comes with support for linting a few languages. if yours isn't
supported, add something like the following to your config file:
extendsyntax sh linter dash -n
"sh" should be the name of the syntax file you want it to apply to.
"dash -n" should be the linting command. you can run the linter with
M-B. it works pretty nicely.
commenting and uncommenting lines
M-3 comments or uncomments a line. nano does in fact have a mark, which
can be activated with M-A. While the mark is active (text is
highlighted), M-3 will comment or uncomment all the highlighted lines.
formatting
nano has support for formatters. as with the linter, this can be added
to syntax which doesn't already have it with
extendsyntax go formatter gofmt -w
it copies the current file to a temporary file, runs the formatter on
it, and if there are no errors copies the new file back. you can run it
with M-F.
higher level movement
everyone knows how to move up and down, left and right. nano can also
move in blocks with C-Up and C-Down and in brackets with M-].
nano also has anchors. an anchor can be put on any line with M-Ins. If
you enable line numbers with M-N, you can see a diamond on lines with
anchors. you can navigate between anchors with M-PgUp and M-PgDown. i
like to use this with the mark.
regular expressions
add "set regexp" to your nanorc and you will be able to use regular
expressions in searches.
macros
nano has macros. M-: starts and ends recording a macro. M-; plays back
a macro. it's enough for most things i use macros for. i find it useful
to "set stateflags", which puts a "R" in the top right of the screen
while a macro is being recorded. it also puts an asterisk next to the
filename when it has been changed from disk.
buffers
M-← and M-→ navigate between buffers. i normally use a buffer for what
i'm editing, and a scratch buffer for commands and notes.
external commands
^T runs an external command, and puts the output where the cursor is.
pressing M-F at the prompt will put the output into a new buffer.
prepending a command with "|" will give the selected region as the
command input, and replace it with the command output.
conclusion
those were some of the things that you can do with nano that a lot of
people don't seem to realise. it is definitely not up to the level of
vim or emacs, but it is a very capable editor. maybe if we dropped the
elitism and actually read the manual like we preach so much we would
appreciate the diversity in tools we can use.