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.