I've been learning Web design and development with Microsoft Expression Web. I picked it over other options just because it was free to students. It has a lot of nice features, but of course it only runs on Windows. I have a Mac. I run Expression on a Win7 VM, but that affects system performance and isn't quite as convenient. So I'm looking for something like Expressions Web for OSX.

Of course there are dozens of HTML editors for Mac. I'd like to get the forum's opinion on a few. I'm looking for the following features:

-Auto-completion/intellisense for HTML, JavaScript, and PHP. Something where if type "<div ", a little drop-down appears showing all the attributes for the tables tag. Likewise, something that catches syntax errors. Expression does this for HTML and JavaScript, but not for PHP.

-Auto-upload to a web server. So I don't have to edit with one program and upload with another. A setting where I enter the hostname, password, and default folder for my web server one time. After that, I can click "Upload changed files" and it will upload whatever has changed.

-Web server built-in. This is something that Visual Studio has but Expression Web lacks. A web server service that starts when the program starts, and ends when the program ends. That way if I'm previewing a web page on my local PC, I can see if AJAX, PHP, etc are working properly.

-MySQL client. This would be nice but not really necessary.

-No WYSIWIG needed. I like to type out the code by hand, so WYSIWIG features aren't important to me.

I'm willing to buy the software, so free items aren't the only options. What editor do you prefer?

Vim. TextMate if I'm not feeling modal. I've used Coda and Espresso and find them both lacking, but they're common options as well.

I would suggest avoiding autocompletion and intellisense until you're sufficiently competent that you need it for productivity rather than for code exploration; none of HTML, CSS, or PHP is difficult enough to really need it when your text editor is side-by-side with a browser, and you'll learn more if you're actually reading reference material instead of tabbing through things. This is perhaps most significant for PHP, where you end up having to read the documentation to avoid the unending stupid gotchas you'll find everywhere.

Your other stuff: OS X tries to get away from it, but outside of Xcode, development on the system is very Unixy and to have the best experience you're probably going to need to come to grips with that. Your "MySQL client" is your shell, or something like Navicat at best (worst). Unix web servers have way too many options to have something "built-in", but MAMP should do OK for your purposes. (Not for production. Learn nginx+php-fpm for that.)

If Textmate is not to your taste, there is always Sublime editor or BBEdit, the later is my editor of choice but I do think it has some odd quirks that might make or break your experience.

Nine times our of ten when I develop directly on a web server *blasphemy* I just open (standard double-click) on the file in my SFTP client (Transmit) and it opens in BBEdit, whenever I save Transmit will auto-upload the file.

Sequel Pro and TextMate are the tools I use when doing web dev on OS X. Setup Apache and MySQL and you're good to go.

The features you're asking for sound convenient, I suppose, but it also sounds like a lot of hand holding. I think there is something to be said for using a text editor to write your PHP/HTML/CSS and handling the rest with other tools. You're more likely to be learning the actual way to do web development instead of just the button/menu layout of the IDE you're huddled inside.

-Auto-completion/intellisense for HTML, JavaScript, and PHP. Something where if type "<div ", a little drop-down appears showing all the attributes for the tables tag. Likewise, something that catches syntax errors. Expression does this for HTML and JavaScript, but not for PHP.

I would avoid this if you are learning. It's too easy to rely on the IDE. Read the documentation and enter things manually and you will learn faster.

-Auto-upload to a web server. So I don't have to edit with one program and upload with another. A setting where I enter the hostname, password, and default folder for my web server one time. After that, I can click "Upload changed files" and it will upload whatever has changed.

-Web server built-in. This is something that Visual Studio has but Expression Web lacks. A web server service that starts when the program starts, and ends when the program ends. That way if I'm previewing a web page on my local PC, I can see if AJAX, PHP, etc are working properly.

Macs have the Apache web server built in so you don't actually need to do these. Once the web server is switched on you can just edit the files directly. Much easier.

Thanks for the advice. I download PHPStorm and Sequel Pro. I'll fiddle with them this weekend. I remember using Coda last year, and I wasn't too impressed with it.

For other languages I've learned (Java and Powershell), I've gained a lot from using IDEs. The auto-complete feature has helped my learning tremendously. Working in PowerGUI (a great IDE for Powershell), for example. After typing a command I can just type a dash and see every member the command has. Holding the mouse over a particular member pops up the documentation on that member. It's much more useful than typing "get-member" over and over again. It comes in especially handy when I make an object from some obscure .Net class that I'm not familiar with. After I've used a command/member/class/whatever with auto-complete a few times, I don't need to auto-complete it anymore.

I also like the small conveniences: multiple files are grouped in tabs instead of separate windows. For HTML editors, one button can open the file in IE, Chrome, and Firefox, at different resolutions. If I've edited 20 our of a 100 files in a site, I don't have to open an FTP client go through each of them looking for which ones have changed. I can just click to upload only the changed ones. Those little conveniences save time, and I don't think going without them would hinder my learning.

Now, I have seen IDEs that practically write the code for you. IIRC, NetBeans has a GUI builder that lets you drag and drop window elements while it spits out the code. I saw a Powershell IDE that did the same. That seems like a real hindrance to learning. I avoid those features.

But I could be completely wrong, and I really appreciate input from more experienced developer. To clarify my experience level: Last night I used PHP/JavaScript to create an HTML table based on a SELECT query of a mySQL database (sorry, schema). Tonight I'll write another script to perform an UPDATE based on user input. So...yeah, I'm pretty beginner. Thanks for your help.

I have a website registered with Just Host. I write on my local machine and upload the files to the web server. If the file is just HTML/JavaScript, I can open the file on my local PC and verify it works. But if it uses PHP or AJAX, it won't function if I open the file on my local PC.

If I enable Apache on my local system, and I direct my editor to utilize it, will the AJAX features then work? For PHP features, can I just download the PHP server and install it on my system?

Assuming I did all that, I could build/test the site on my local PC and then sync the files to the remote host, right?

I have a website registered with Just Host. I write on my local machine and upload the files to the web server. If the file is just HTML/JavaScript, I can open the file on my local PC and verify it works. But if it uses PHP or AJAX, it won't function if I open the file on my local PC.

If I enable Apache on my local system, and I direct my editor to utilize it, will the AJAX features then work? For PHP features, can I just download the PHP server and install it on my system?

Assuming I did all that, I could build/test the site on my local PC and then sync the files to the remote host, right?

I have a website registered with Just Host. I write on my local machine and upload the files to the web server. If the file is just HTML/JavaScript, I can open the file on my local PC and verify it works. But if it uses PHP or AJAX, it won't function if I open the file on my local PC.

If I enable Apache on my local system, and I direct my editor to utilize it, will the AJAX features then work? For PHP features, can I just download the PHP server and install it on my system?

Assuming I did all that, I could build/test the site on my local PC and then sync the files to the remote host, right?

Seems to me you need a better handle on the basic architecture. Javascript runs on the client side in your browser. Hence no web server is required. PHP runs on the server side and thus requires a web server. There really is no PHP server. Your browser says to the webserver "I'd like index.php, please" then the webserver executes that script (exact details vary by configuration) and sends the result back to your browser.

AJAX can in essence be thought of as loading more websites in the background. You need a webserver to handle those requests.

Seems to me you need a better handle on the basic architecture. Javascript runs on the client side in your browser. Hence no web server is required. PHP runs on the server side and thus requires a web server. There really is no PHP server. Your browser says to the webserver "I'd like index.php, please" then the webserver executes that script (exact details vary by configuration) and sends the result back to your browser.

AJAX can in essence be thought of as loading more websites in the background. You need a webserver to handle those requests.

...

Apache is a webserver. Apache is also built into OSX. Once you turn it on, you are running a webserver.

You can also run PHP on OSX. There are instructions linked in a previous post about how to do this.

There is nothing that says the client (browser) and server (apache or whatever) can not be on the same physical machine. If you don't like apache and just want your ajax GET requests to work, you can use SimpleHTTPServer, which is built into Python (also built into OSX).

Anyway, the answer to the original question is "YES", you should ideally be able to install Apache/PHP/etc on your local machine and do all your development locally, and then just push the files to the remote system once you're done. This is how most sensible people do web development.

If you're trying to put a Rails app behind it or something you're probably Doing It Wrong, but if you're just doing simple PHP development on OS X, given that OS X ships with Apache and you can enable PHP support by uncommenting a single line in the config file, it's probably overkill to resort to another solution.

Thanks a bunch for the advice. I enabled Apache with PHP support and installed MySQL on my Mac. I've been using PHPStorm and MySQL workbench for the last few days. They're just what I'm looking for, a perfect replacement for MS Expressions Web and MS SQL Server Management Studio.