From the Web SiteHere are some high-level bits from the web site along with some of my own comments:
Discover the joys of Python programming with the NetBeans IDE for Python Early Access. Enjoy great editor features such as code completion, semantic highlighting, and more. The EA release also includes a community developed Python debugger and offers a choice of the Python and Jython runtimes.
The NetBeans editor for Python supports Smart Indent, Outdent, and Pair matching, additional to syntactic and semantic highlighting, code folding, instant rename refactoring, mark occurrences, finding undefined names, and Quick Fixes. Code completion is available for local function and variable names as well as Python keywords. The editor also assists you by inserting and fixing import statements.All that stuff seems to work. I opened a file. It gave me a PyLint-like warning that said, "The first argument to a method should be self or cls. I was using klass. I right clicked on klass and said rename. It renamed all the occurrences. Easy.
With the NetBeans IDE for PHP, you get the best of both worlds: the productivity of an IDE (code completion, real-time error checking, debugging and more) with the speed and simplicity of your favorite text editor in a less than 30mb download.The IDE stuff works well. However, it definitely can't touch the speed of my favorite text editor ;) The fact that the download was only 25mb (109mb uncompressed) was indeed quite impressive in comparison to Eclipse.
The Good PartsFirst of all, let me say that NetBeans is stable. It hasn't crashed on me yet. It's also pleasantly attractive. I like the rounded corners, fonts, and icons. I don't feel overwhelmed by NetBeans like I do by Eclipse. Also, the training videos were very well done.
The Bad PartsIf I have a multi-line Python comment, there's no way to rewrap the lines. In Emacs, this is M-q. In Vim, it's gq}. I generally consider that a must-have editor feature.
It doesn't seem to support rectangular selections or column editing (i.e. cntl-v in Vim). I always say that that's one of the features that separates the really good editors from the mediocre ones (Vim, Emacs, Nedit, and Komodo Edit all have it). It's such a useful feature. When I searched for "column" in the documentation, one of the search results was how to add a column to a database. That really underscores my point that NetBeans is a great IDE, but not necessarily the best editor.
There are no Vim or Emacs key bindings. That's sort of a bummer. To be fair, no one ever gets Vim key bindings perfectly right anyway. Nonetheless, the IDE is decidedly mouse heavy. Many common editor tasks that deserve a key binding don't have one.
Opening up files is a bit painful. I really missed tab completion like in Vim and Emacs. What's worse is that Apple-o isn't the key binding for opening up a file. In general there are a lot of places where NetBeans follows the standard OS X conventions such as Apple-x to cut, but there are some strange places where it deviates from those conventions.
It doesn't support editing a file remotely using scp.
I don't see a way to tell it to run "make test". Komodo Edit let me run "make test" and then click on file names if there were errors in the output.
Other CommentaryI created a new project from existing sources. On the downside, this created a new folder in my project. On the upside, that folder was only 8k worth of data. I definitely don't feel like I have to make everyone on my team switch to NetBeans before I can start using it. It says that it can synchronize with Eclipse projects, but I don't actually need that feature. During the project creation wizard, it expected my source files and my tests files to live in different trees. That was sort of weird. I just told it to use the same directory for both.
It supports code snippets, if you're into that sort of thing.
For PHP, it can do code completion of symbols in other files. It also shows you the documentation that you wrote. I tested it, and it worked for Python too.
For PHP, it will warn you of uninitialized variables.
It does have version control support built in. The graphical diff utility was very nice. Committing code changes was painless.
As you would expect, it does provide a line at column 80. As I mentioned before, that was a pain for me in Vim.
The code folding support works very well. Functions are automatically recognized as something you can fold. Better yet, it understands HTML well enough to fold blocks of HTML.
When I opened a Python file, there was a widget that showed me an outline of the file, including all the classes and methods. It worked pretty well in PHP too.
It said that "from __future__ import with_statement" was an unused import. I think that's a sign that its Python support is still pretty young.
There's a margin to the left of the code that shows me what lines I've changed. It's like the diff is built into the editing experience.
In general, the code completion is pretty good. However, it got confused when I typed "from a import b; b.something". I think it didn't understand that I was importing an entire submodule.
The code completion for "self." was pretty helpful. It even showed me my own docs.
If I type "from a import ", it shows me a list of things I can import. That worked pretty well. However, when I picked something, it included the argument parameters like "from a import b(c)", which was sort of a weird bug.
When I'm calling a function, it tells me what arguments that function accepts. That works for builtin functions or functions in the current file, but it doesn't seem to work for functions in my other modules.
When typing HTML, it's very helpful about adding closing tags, indenting within tags, etc. If I put my mouse on a tag, it shows me the closing tag.
The "Find Within Project" feature (i.e. project-wide grep) was powerful and friendly.
There was a menu item called "Insert a Method". It just dumped a code snippet at my current cursor location without even bothering to indent it properly. However, the "Insert a Property" menu item was truly helpful. It knew the correct idiom for creating properties (the one where you use locals() and **).
There are a ton of things in the Source menu that don't seem to work yet or at least don't work as I would expect them to.
The Python console is exactly as you might expect. I wonder when the IDEs are going to discover that IPython rules. Seriously, it doesn't matter that the shell is integrated into the IDE. If it isn't IPython, I'm not going to use it. By the way, I hit cntl-d in the shell, and it stopped responding ;)
If you open up a CSS file, you can use the CSS Builder and CSS Preview widgets. The CSS Builder is basically a point-and-click GUI for creating CSS. It's helpful, but not overly intelligent. For instance, I wanted the "margin" to "All" be 1px. It added four separate lines for margin-top, margin-bottom, etc. The CSS Preview widget is indeed helpful, although I'm not sure how well it will work as soon as you start getting multiple CSS files in the mix. Thankfully, Firebug helps out a lot for this problem.
When I closed the CSS file, the CSS Builder and CSS Preview widgets didn't go away as I would have expected them to. This probably suggests something deep about Eclipse's support for "Perspectives" which are sets of widgets useful for the task at hand. (There's a perspective for Python and there's a perspective for HTML and CSS.) Of course, perspectives are one of the things that make Eclipse feel overwhelming to me.
You can "undock" an editor window to put it into a new top-level window. I know Emacs fans are proud of this feature in Emacs.
It's possible to split the editor window to edit multiple files side-by-side. However, I must admit that I couldn't figure out how until I looked in the documentation.
I typed "getenv" and told NetBeans to add the import line. It did it correctly. It even added it to the correct block of imports, but that might have been by coincidence. Personally, I think this feature is overrated. Perhaps it's more critical in Java.
It told me that I was using an undefined variable when I used a global that was defined in another function. It doesn't know that in Python, you only have to use the global keyword if you want to rebind a global. It's not necessary if you merely want to read the value of a global.
In PHP I defined a function called f and then tried to call it. It was not able to autocomplete the name of the function. However, it was able to autocomplete on PHP builtin functions and to give me their parameters.
When I'm typing a multi-line comment in PHP (using "//") and hit enter, it adds "//" at the beginning of the next line. However, it doesn't do that for "#" in Python.
If I remove a colon from the end of a for loop or the end of a def, it doesn't
complain. That's a bit of a bummer since that's by far my most common syntax error.
Installing the PHP plugin was so easy. There was a list of plugins. I picked one and installed it. To be fair, I think this is more complex in Eclipse because Eclipse lets you install plugins from all over the web. In contrast, there are only about 100 different plugins for NetBeans. I'm guessing there are far more for Eclipse. I liked the fact that I could filter the plugins by the term I was looking for (in this case PHP).