I am surprised no one has mentioned emacs yet.
You can do all of what you asked for in emacs. Best of all, if you do not like something, you can change it.
In addition you can enable things like
- code completion (fills in variables names that you have used before)
- electric mode( type if+space and the editor inserts if(){\n} )
- a menu, listing all the subroutines in a script file (its called speedbar).
- the best mode for viewing the differences between two files (its called ediff)
- full perl style regular expression support to search, replace
- cross platform (I use it on windoze, linux, True64 Unix, VMS)
- its GPL'ed (RMS's most famous project)
- an important reason for me is that it provides this support for almost any programming language you can think of. ( As part of work, I have to work on several different languages, but emacs provides a consistent environment. I even get Visual C++ and Code Warrior to invoke emacs to do the actual text editting.)
The cons being there is a small learning curve while getting fimilar with all the features that emacs offers. Most of the stuff is available from the pulldown menus, so don't let that scare you. The other issue was some of the keys are not standard by default, but you can easily redefine them so that the keys work the way they would in a windows based editor.
vim will probably do the some of the above things for you. But I will let a vim worshipper enlighten you about vim