311 comments

[ 3.2 ms ] story [ 301 ms ] thread
I have a new project at work that I decided to use it for to see how I liked using VS Code.

For the most part, I like it, but it's lack of Mac-nativeness bugs me, and it may bug me enough to switch. Double clicking the window bar in all natives app minimizes them to the dock for me. In Visual Studio, it maximizes my window (but not into full screen mode). I keep clicking the menu bar to minimize a window, and this keeps happening. It's kind of maddening.

It looks pretty bad on Linux too. Somehow they managed to transport the crappy font rendering from Windows to Linux. It really feels like it's not built for Linux, but just shoe-horned in.
I'm using it on Windows and Linux, and found it pretty good. What's the issue with fonts?
Set up 11pt Consolas on a native Windows app and set up VSC side by side. It looks nothing alike.

It's a years old Chrome bug. Wish they had a Chakra version of Elektron.

I see.

I always use 15pt Fira Code

On Linux, it renders fonts the same way Chromium or Chrome do. If you're getting "crappy font rendering from Windows", you probably need to change your fonts.conf to change font hinting from full to slight (or none, if you like it more like Macs).

Edit: And also note that, for whatever reason, GNOME does its own thing where you also have to edit the GSettings in addition to the fonts.conf settings depending on what app you're running.

Font rendering is handled by Chromium's libraries/dependencies.

Do you also criticize Chromium's font rendering? Maybe you are just looking for things to complain about?

Chromium font rendering on Windows is terrible as it doesn't properly use the platform renderer and settings.

However on Linux it does, so this sounds like a broken fontconfig setup, or a toolkit not getting the right hinting config.

There is a way to set VScode to use the native menu bar on macOS instead of the Electron'd frameless bar.
Enabling that system-wide made the experience so much more pleasant:

    "window.titleBarStyle": "native",
OMG this is so much better. I don't get why they would make "custom" the default setting. Thank you.
(comment deleted)
(comment deleted)
I never minimize anything on Mac, the concept is not so useful since there's nothing interesting on the "desktop" anyway.
I keep a lot of different overlapping windows open, and I sometimes minimize apps to find other stuff, not the desktop. For instance, I might be minimizing my text editor so that I can push a bunch of Git changes in Tower.
I'm not going to use an editor that Microsoft employees literally shill on tech forums.
Don't let the door hit you on your way out.
Please don't post like this on Hacker News. Baseless accusations of shillage are more of a problem here than shillage itself (about which you're welcome to email us at hn@ycombinator, if you suspect it).
Anyone knows if there's something like Goya for Vim for VSCode? I know there's full screen and zen modes, but I miss margins so that when I'm full screen I can have everything centred on monitor.
VS Code's release notes are really nicely done - I don't usually comment on documentation but whoever wrote these did a bang up job!
yeah I must say the team does a great job, I was thinking the same thing
I remarked this to my colleagues; part of me wishes they'd do faster releases, if only so that the changelog is smaller. Big lists of changes scare me. Big lists of changes that were apparently all done in a month and work without being horribly broken or half-assed, on the other hand, impress me.

This comment is a long-winded compliment.

Absolutely! I love to read through them on each release to discover whats new. And each time I'm surprised how many new useful things get integrated.
Anyone know if the C# plugin supports cshtml files yet? The lack of autocomplete, inspections and so on really hampers web development with it.

I've now switched entirely to using Rider because of this. While it's still early days for Rider (and it makes my Laptop's fans spin nonstop), being able to hastily edit my views makes it more than worth it.

(And integrated ReSharper is always good!)

<sarcasm>I would be shocked. cshtml support tells me your using server-side rendering. I as a hip-node.js-silicons-valley-startup-founder-coding-rockstar can tell you to use a Javascript framework instead</sarcasm>
All the js hipsters are trying to do SSR whether they really need it or not too
If you are using C#, why not use Visual Studio?
Another great release!

Maybe I'm just squarely within the target audience of VSCode, but I'm consistently impressed by how many of my pain points just magically go away with each new iteration.

I come from WebStorm, Sublime and Atom.

Atom and WebStorm felt rather clunky. Sublime was super fast, but somehow lacked behind in new features.

VSCode is a revelation for me :)

I had to move off WebStorm after the sheer amount of memory it used to chew up.

Agree - VSCode is such a good IDE, I'm constantly seeing it replace editors other devs have relied on for some time.

I miss the test runners from WebStorm, that hasn't been enough to stop me from switching to VSCode though.
whenever I try Webstorm, my laptop starts sounding like an Airbus A380. What makes VSCode different from Atom though is, VScode uses Monaco which is significantly better and also the start up is faster with VSCode.
Yep exactly my experience with Android Studio, to the point I started enjoying Eclipse again.
How are other people doing ES6 work with WebStorm?

---

I am a very happy Jetbrains customer (ultimate, paid in full).

Now doing nodejs work. (Not a fan, it's just a job.) Really want to use latest, greatest (eg await/async). I tried to make the babel plugin workflow thingie work. Bleh.

I'll give VSCode another shot. Last effort, I stumbled on the npm package.json support. The npm plugins I tried baffled me. (Again, not a fan of npm, it's just a job.)

The slowness shown in the pre-1.9 terminal is a bit ridiculous. Was it really the case? I've never seen such a strangely-behaving emulator! Really good that they resolved the issue.
Hi, I worked on those improvements. Yes that is indeed what would happen when you ran a command with heaps of output, it would also lock up the UI while doing it. You probably haven't observed it much as you don't do recursive directory walk on a large directory ;)

You can read more about the specifics if you're interested in https://github.com/Microsoft/vscode/issues/17875

Hey, just wanted to say thanks for working on VS Code, I use it every day, love it!
Great, I didn't know the terminal portion if VS Code exists as a separate project. Was it made to fuel VS Code? Or did it already exist before launching VS Code?

I also liked the name of the project, xterm.js. :)

Looks like xterm.js was started by Sourcelair, which looks like a Cloud IDE.
Thanks for your work on this! The addition and consistent improvement of the integrated terminal is the number one reason why VSCode is my daily driver.
The gained performance in the current release (and in Insiders for the past days) is huge - even without heaps of output. Those couple of milliseconds improved rendering time matter even if you "only" ls in a directory.

Thumbs up for this, Daniel. Thanks.

It was noticeable, but only really bad in some very specific cases (disk I/O?).
Yeah, that was the main reason I didn't use it a lot actually. Powershell is slow to begin with and in VSC it was just 10x slower and buggy.

I am very happy that this is solved.

Man, I'd really like if they'd just add a default hotkey for 'Open Folder'. I know you can custom map hotkeys, but for an editor that's supposed to be 'easy to use out of the box', it's still lacking some basic features.

That being said, it's nice that they're improving it still

Hitting F1 for the command palette tells me that the default shortcut for Open Folder is Ctrl+K Ctrl+O
Even better, Open Recent is Ctrl+R which is handy enough I might remember it.
Huh, I guess it just isn't shown on the file menu then. Thanks!
(comment deleted)
VSCode really does improve with each release, and the monthly cycle is just about the perfect pace. This is a great example of how to run an OSS project.

I wonder how much Microsoft spends on it each month, and what value they see in it? Is it just a marketing expense? e.g. They fund VSCode in order to gain the good will of developers which they hope will turn into Azure or maybe Windows sales in the future?

VS Code is a web dev IDE. Microsoft has lost the mobile platform wars and pushing the web is a way of countering that. Plus, web and azure do go hand-in-hand, as you point out.
Nothing in VS Code is terribly web specific. I've been using it for C++ for which it works swimmingly.
I would like to try it for native development. How do you run and debug your C++ programs from VSCode?
https://code.visualstudio.com/docs/languages/cpp

> VS Code supports tasks that you can configure to build your application, and natively understands the output of MSBuild, CSC, and XBuild.

Yes, building works well. But how do you run your application?

(To be clear I'm asking what workflow users use personally, since it seems like nobody else has this issue.)

(comment deleted)
(comment deleted)
For me, I build on the command line, because I have a funky build process, and then when I want to debug it I just press the 'debug' button.

There's a big JSON file with the debug configurations, and a drop-down to allow you to select which one is active. Each gdb debug configuration lets you specify the usual binary path and command line arguments, plus a whole lot of other configuration I haven't looked at. I haven't had to do any project-style setup --- it just magically finds all my source files.

It looks like it supports gdb on Windows and Linux and lldb on OSX (only ever tested on Linux, though). Out-of-the-box you get sample configurations to both run and attach to a C/C++ binary.

gdb integration is pretty seamless; breakpoints, conditional breakpoints, stack traces, local and global variables. Haven't seen threads, watchpoints, or an assembly window yet. There's a debug console, but entering commands doesn't appear to send them to gdb.

It's one of the best Linux gdb environments I've seen (even though most gdb integrations are terrible).

Threads are part of stack trace - if you look closely, it has nodes for threads, if you have more than one thread running.

If you attach or launch more than one process, that's where they will appear also, as top-level tree nodes.

The personal preferences file includes several defaults for S/CSS, HTML, JS and TS, and it has a lot of Typescript stuff out of the box, some node stuff.
Right, but VS Code's depth into other languages and stacks is quite extensive, as well. If I were promoting a new text editor (hell, or any piece of software), I would certainly set the most-visible defaults to hit the most common use case, which at the moment is web front-end oriented tasks. To get a fairly full featured C++ experience, VS Code is up and running in three mouse clicks and two text fields from the splash screen -- this includes automated downloads and installs of major pieces of Clang tooling. I also write a fair amount of more data-centric Python, and the experience is similarly painless (I haven't tried Rust or Go, but if f*ing C++ is this easy I can't imagine other stacks are worse), so I don't think I'd call it web centric at all!
I wonder what set up you have for c++ in VCode (plugins etc) I'm learning c++ at university and currently I use CodeBlocs since it have quite nice code completion.
I've never heard of VS Code referred to as a web dev IDE - what makes you say that?
Well, the Task Runner has preconfigured options for Grunt, Gulp, npm, maven, and TypeScript, but not make, ghc, cargo, etc.
That's pretty nice then - I haven't used it much at all, but I've read a fair bit about it. Thanks for the information!
I use it full time for C, Go, Python, Ruby and NodeJS development. Works well with Rust as well. Nothing "web"-specific about it, really.
They lost the mobile phone, but I bet they will win the hybrid tablet/netbooks one, given how Android tablets disappeared from many consumer shops here in Germany, only to be replaced by Windows 10 ones.

Samsung and Asus ones seem to have been the surviving brands and even they have Win10 devices on their brand sections.

No they won't. No one wants to use clunky non touch optimized windows desktop apps on a tablet. Besides, UWP was a failure.
Ever heard of Project Centennial?

Or the fact that all new APIs are mostly UWP only?

Yes, and how's that coming along? Is this "project" supposed to make those old clunky non touch optimized windows desktop apps suddenly usable on a tablet? I don't think so. Instead its going to be another failure just like Project Astoria and Project Islandwood.
Astoria was the start of a lot of the technology behind the Windows Subsystem for Linux, if i remember correctly. I use WSL every day, so that was definitely not a failure in my book.
>They lost the mobile phone, but I bet they will win the hybrid tablet/netbooks one, given how Android tablets disappeared from many consumer shops here in Germany, only to be replaced by Windows 10 ones.

That could just be a regional anomaly.

Then it is an European regional anomaly, because I have seen it in other countries that I visit regularly (southern Europe).

On the other hand, speaking about regional anomalies, I almost never seen Chromebooks on sale, or people using them. Yet they apparently sell like hot cakes in US.

Can confirm that this is the case here in the UK as well.
It is also the case in Australia, based on my experience Windows tablets are at least as common as Android ones. If it's a regional anomaly, that has to be a very wide region then :-)

Jokes apart, I have noticed that in developing countries (I regularly visit Thailand for example) Android tablets are still more common than Win 10 ones, I believe it's because in those countries many people were first exposed to computing in the form of a smartphone, so they prefer a mobile OS like Android, whereas in the western world most people (except perhaps very young people) were accustomed to use a personal computer long before they even had a smartphone.

This is a ridiculous comment. There are plugins for every language. I use VS and I don't use it for HTML/CSS or Javascript yet.
Python and CloudFormation here. Others swear by the Golang support.
It's probably a complex set of factors including developer good will and competition in the marketplace (VSCode is obviously directly competing with Atom, for instance, which is also free).

One interest small piece of the larger puzzle is that the Monaco text editor at the heart of VSCode was originally built for Azure and Visual Studio Team Services cloud editing. It was then also subsequently embedded into IE's Dev Tools (and now Edge's Dev Tools). It's a neat example of building a tool for several existing needs embedded into existing products/projects and then finding that the same tool was also interesting as the core to its own product.

VSCode vs Atom (in my opinion) isn't even a contest. Maybe Atom is super nice for some web dev stuff, but as a full flown IDE I just don't see the features.
Are you confusing VSCode with Visual Studio? VSCode is not an IDE, it's an editor, much like Atom.
Vscode is an IDE. It integrates all your development into one environment. It comes with support for version control, code editing, task running, and debugging all from one application.
An IDE is so much more. For instance, refactoring features. Even Microsoft defines VSCode as a "code editor" and not an IDE.
VSCode does have basic refactoring features.
Have you even used VSCode?

It has refactoring, and revision control integrated. You can compile and run code, you can set breakpoints and step through execution. That's waaaaay more than just an editor.

Think of "code editor" and "IDE" as two endpoints on a continuum. VsCode is less of an IDE than Visual Studio or Eclipse, but more of an IDE than Atom.

It has has debugging and task running, after all. Sounds a lot like an IDE.

Exactly, it never ceases to amaze me how often people arbitrarily categorize stuff as is/isn't
As someone who started on FoxBASE, Turbo BASIC and Turbo Pascal (all for DOS), it's amusing to read comments like these. We certainly called these things IDEs, and the sole reason was that you could build your program directly in them, and the debug it, breakpoints and all.

I wonder what someone coming from an earlier era would have to say on that...

I don't think refactoring was even a term when the first IDE's came out.
From the FAQ:

Visual Studio Code is a streamlined code editor with support for development operations like debugging, task running and version control. It aims to provide just the tools a developer needs for a quick code-build-debug cycle and leaves more complex workflows to fuller featured IDEs.

So, even Microsoft doesn't think it's a full blown IDE. With enough plug-ins it certainly could be.

That last sentence strikes a chord. Most IDEs are basically heavy-weight plug-in platforms (especially Eclipse and IntelliJ), built with the intent of being heavyweight IDEs. The currently popular editors - ST, Atom, VS Code - and the console-based editors that are still popular - Vim, Emacs, etc - approach it from the other side, putting text editing (including search etc) first, then adding plugins on top of that.

Or maybe put differently, IDE's are enterprise software, editors are agile startups?

Microsoft is smart not to call it an IDE. As that would drive hipsters away.
If there's some sort of editor-IDE spectrum, VSCode likely lives closer to the IDE side than editor.
I assumed the idea was also to eventually to get some users to move to the "real" visual studio, which I ended up doing at least to debug C++, except the vs editor is so much worse!

For example, I use Ctrl+D for multiple editing all the time and I converted other people to vscode based on that feature alone, yet it does not exist in visual studio...

I'm probably wrong, but I get the feeling VSC is where all the MS devs that were fed up with Visual Studio politics moved to. They're able to get new features rolling much faster, rather than going against the ingrained assumptions of an Enterprise Application like VS.

I loved VS, but pro much stopped using it after starting to use VSC.

VS Code is part of the strategy to get .NET Core distributed and to support the web layers built on top of that which mostly now use open source technology (from npm and bower through to grunt, typescript and angular)
Na, I think the real plan starting to unfold. This week we get the new welcome screen, next will be the "deploy to Azure" and "how to make a Windows Store App" sidebar links.

(not that I'll stop using it, I'm sure someone will fork if gets too obnoxious)

Wow that is a scary vision and it would be heartbreaking if they rendered it unusable with ads or other nagging "features".
I doubt they will do that, they know that the project's success is 90% based on developer goodwill.

My guess is that they will up-sell to a version with bundled plugins which offer turnkey integration with Azure.

It's the only practical way to do cross-platform .NET Core development.
If that's true, then I'd recommend not using either .NET or VSCode if cross platform matters to you.

Historically speaking, Microsoft will break compatibility when it suits them.

Are you talking about csproj -> project Jason ->
The project is Open Source, MIT licensed. If they break compatibility you (or someone else) can just fix it. No difference from any other OpenSource editor.
> They fund VSCode in order to gain the good will of developers which they hope will turn into Azure or maybe Windows sales in the future?

I think they are just trying to make Windows (and Microsoft) more relevant among web/foss developers by making sure that top-notch tools exist with first-class Windows support, so this falls to same category as Windows Subsystem for Linux.

Waiting for the rollback update. ;-)
Downvoted to oblivion, but I totally called it!!! 1.9.1 recovery build out today.
Or maybe you are part of VSCode's epic astroturfing campaign?

Sorry, not saying you are but man MS is guerilla marketing VSCode like I've never seen in an opensource developer product.

Or maybe it's a good product? Occam's Razor and all that.
This is the only product on HN I've ever seen where "This is great!" is all over the place and never downvoted. Almost every single product on HN that makes it to the front page is full of flamewars and grumps. I should post the sentiment scores. Its a serious outlier.
The sentiment scores are somewhat pointless, I feel. If you're concerned about astroturfing, all post history on this site is public. You can click a user's username to browse their comments. Bots are pretty obvious, I do this on reddit quite often.
Atom and Dolphin also get near-unanimous praise when they come up. It's not exclusive to VSC.
With Atom, there were usually many gripes about sluggishness. Maybe that's improved with recent updates.
Atom is also actually sluggish, so the gripes make sense. VSC isn't.
We all love a redemption story.

Over the decades I've gone through a personal journey of discovery, astonishment, deep affection, surprise, disappointment and downright hatred with respect to Microsoft, now transitioning to wary hopefulness.

We all want competition in the marketplace, so I like to see them visibly earning their way back into developer affections and leaving their dickish ways behind them.

>This is the only product on HN I've ever seen where "This is great!" is all over the place and never downvoted.

Then you probably weren't on HN for long, because all kinds of upcoming products used to have a similar treatment (Rails/Ruby at some point, then Golang, then Mongo, then Nodejs, nowadays Rust, etc.).

But unlike a language, which might have people for or against it with strong opinions, who would downvote a new code editor that's not part of a religious war (like vi/emacs) and that does things mostly right?

>I should post the sentiment scores

How about you stop doing sentiment analysis, instead? It's a crappy "data mining" where you can find everything you want to find, and next to useless for any actual insight.

Do you have any proof that it is astroturfing and not just genuine enthusiasm?

I am almost a lifelong vi user, but have been using Visual Studio Code last few months because it's Rust experience is smooth. (Though Emacs seems to do well as well.)

Just that the sentiment scores of comments blow everything else out of the water. Haven't done one in a month or two though.
People like a good product.
So, to be clear, your evidence that there is a massive MS astroturfing campaign is that... people overwhelmingly post positive reviews of the product?

This type of thinking has infected everything and it baffles me. People are so unwilling to contemplate the fact that they are wrong that they'll jump through mile-wide mental hoops just to put the responsibility on someone else.

Great, either show us proof or stop your accusations.
>Just that the sentiment scores of comments blow everything else out of the water. Haven't done one in a month or two though.

Well, that's how a product that does things right would look like.

That is, if "Sentiment scores" wasn't mumbo jumbo crap -- isn't the social sentiment-analysis fad from 5-7 years ago over everywhere yet?

I guess I am one of those astro turfers too because VS Code is probably one of the best editors for Windows right now.
I've once tried it on linux, it was even faster there!
Agreed. Since VSCode came out there has been one gigantic circle jerk over it. It's "always" been better than sublime and atom, even though sublime and atom had been out for much longer.

I've used a lot of text editors. VSCode really isn't miles ahead of the rest. As tech enthusiasts we all discuss new software regularly and we know none of us agree on one thing. According to stackoverflow, VSC is only used by 7.2% of users, yet people want to argue that "everyone just agrees it's a good editor". No, no they don't.

The MS employees aren't tricking anyone and it's really more of a turn off than anything. I'll just stick with Vim (there's a reason it's still popular after decades).

I see you've brought that old school paranoid about Microsoft with you over to HN. Vim on Windows is a hilarious idea, though.
Easy solution. Don't use windows.
Ironically the Vim VSCode plugin is one of the better ones I've used short of Vim(the macro playback needs a bit of work but the rest is top-shelf).
We detached this subthread from https://news.ycombinator.com/item?id=13553242 and marked it off-topic. Please don't post like this here. If you have some evidence of shillage that you'd like to share, we'd love to see it. You can reach us at hn@ycombinator.com.
Am I the only one who misses an apt repository?
You can use ubuntu-make, but it doesn't seem (to me) any easier than grabbing the .deb file...
The point of having it in a repository is not managing it through apt, but updating it without having to manually download deb files...
This is an off topic, but I just learned from the article that PowerShell will soon be the default in place of cmd.exe in Windows 10. I welcome this change as I found the experience of using PS was superior to that of bash/zsh in general cases.

But I hope they figured out the performance problem. As of writing, in the stable version of Windows 10, PS is perceptually slower than cmd, so I was forced to use PS only when needed. Funnily it was even slower in Windows 8, so the current affair is better than ever. But to be truly a default I think the performance of PS should at least match that of cmd.exe.

PowerShell needs the .Net runtime so I doubt it will ever be on a par with cmd.exe.
cmd.exe has a limited set of builtin and relies on external applications with a plain text interface.

PowerShell has builtins, can import code from any .NET Assembly or native code DLL, invoke external processes, full featured programming language and structured data.

cmd.exe will never be on par with PowerShell.

GP was replying to a comment about the performance of PS compared to cmd.exe, stating that PS could never be on par with cmd.exe because it needs to load more.
Yeah this is the one thing with PowerShell: with great power comes, erm, not so great performance. I've never been a full-time shell user so after years of occasionally getting some stuff automated using bash discovering Powershell really was like a breath of fresh air.. No more trying/failing to come up with the correct regex to parse the plain text spit out by tools. Command-line completion of arguments. A whole bunch of sane defaults and command names making things easy to discover. Etc. Now at first I only ran PS on a beefy workstation and didn't notice it was kinda slow (even for common operations). But on not-so-beefy machines: yeah, not nice. Then again, cmd is worthless in comparsion with PS so I stopped caring. Thing is also: the time gained by how fast I can get stuff done in PS probably makes up for the time lost trying to figure out the weird syntax of other shells, especially cmd.
> the experience of using PS was superior to that of bash

As a Linux dweller, I'm genuinely curious about this one. I've found PS inferior in just about any use case.

I've used both extensively and I think they are fairly different, with different strengths and weaknesses. Bash is more pragmatic and more concise on the command line. PS is more uniform in its design and nicer for scripting IMO. It allows passing objects through pipes, has built-in JSON reading and writing, built-in parameter handling with defaults, mandatory and optional params, switches etc., and such niceties.
Bash is not more concise, its other way around, of course, if you use default aliases. The reasons is logical - you almost never use text parsing in Posh while you almost never have anything without it in bash.
I find Powershell non intuitive to learn honestly, Bash just clicks with me way more for some reason.
I used majority of mainstream shells and Posh is a scpace ship compared to any other in existence. I wont reiterate again and again why, there are planty of places eihter on HN, reddit or SO why is it so. I guess you will have to give it a serious try.
I go back and forth between windows/unix for my day job and I also would be curious on any actual bullet points. I find that even in a situation where PS could potentially prove more useful or has an extra feature, what you end up with is a new set of chrome tabs open just to try and figure out how to do the thing.

I suppose this might(?) be mitigated if you're embedded in the .NET world, but I just can't seem to get the memory down for the silly cmdlet naming and since they also have the admittedly interesting object-piping thing going on, you're always battling two pain points at a time instead of just one (e.g. syntax/naming in bash)

One of the best bits of PS1 advice I've seen was to get used to the Verb-Noun naming pattern [1] and in particular, the discoverability of the very standardized set of verbs [2].

Once you can guess the verb you want, then it can often be a simple matter of finding the right noun, and often nouns will be useful in sets similar to verbs.

Get-Verb, Get-Command, and Get-Help are all quite useful for looking for a command.

For dealing with the object pipeline I tend to find ConvertTo-Json very handy because as a developer I'm already quite used to reading objects in JSON already. (ConvertFrom-Json can similarly be used to bootstrap a PS1 pipeline with test data or remote data.)

[1] https://blogs.technet.microsoft.com/heyscriptingguy/2012/05/...

[2] https://msdn.microsoft.com/en-us/library/ms714428(v=vs.85).a...

I had been a full-time Linux (desktop) user for more than 10 years, and only recently made a transition to Windows. As I'm nowhere proficient at using PowerShell I might be overrating it a bit, as the grass is always greener on the other side. Anyways, what I found to be satisfying while using PS were:

1. The input/output is done using objects. I know that "inter-process communication should be done with text" is the UNIX philosophy, and I appreciated that when using Linux, but after using PS I started to have mixed feelings about that. When using bash/zsh, I typically used awk to extract the data I wanted from the text emitted by an external process. Doing so isn't hard, mostly as simple as using `awk {print $3}` or something like that, but it is still a bit annoyance and more importantly, vulnerable to the changes in the output format.

PS cmdlets communicate with themselves using objects, so it is very easy to extract some columns out of the command results. For example, when I query about a process in PS:

  PS> Get-Process -Name chrome
  
  Handles  NPM(K)    PM(K)      WS(K)     CPU(s)     Id  SI ProcessName
  -------  ------    -----      -----     ------     --  -- -----------
      362      80   169636     109896  36,411.16    484   1 chrome
      497     113   274988     132544   5,161.00    656   1 chrome
      404      84    87444      55356     303.56    764   1 chrome
If I want to extract CPU time and process ID:

  PS> Get-Process -Name chrome | Format-Table -Property cpu,id
  
           CPU    Id
           ---    --
  36441.265625   484
    5163.09375   656
      303.5625   764
Let's see what processes consumed the CPU most!

  PS> ps chrome | sort cpu -descending | select -first 3
  
  Handles  NPM(K)    PM(K)      WS(K)     CPU(s)     Id  SI ProcessName
  -------  ------    -----      -----     ------     --  -- -----------
     1186     317  1876160    1055016  88,462.64  10524   1 chrome
     1023      88  1825008     668684  37,740.92   6128   1 chrome
      362      80   155776      64560  36,848.00    484   1 chrome
As you can see, I can simply specify the column name(s).

This is probably why many Linux commands have detailed options to limit displayed information. For example, `uname` has -s, -r, -m, -p, and many others that are just portions of -a. If it were in PS there would be no other options than -a and users could utilize it accordingly. Likewise `ps` has many options just to control the output which is again not necessary in the PS's side.

Also due to the probable scripts that may be reliant on the column orders (e.g. my script assumes the third column to be always the one I wanted, because I hard-coded `awk {print $3}` in there), it is very hard to change the layout of the output in Linux commands. In PS there is no layout in the first place, so this backward compatibility concern doesn't exist.

2. Command names are much clearer. Many names are pretty descriptive so I don't have to remember the exact abbreviated forms, but at the same time they provide shorter aliases. For example `Get-Process` can also be called `ps`. bash/zsh can also benefit from this by manually assisning aliases, but I believe "sane defaults" should be long-descriptive names first, and abbreviated forms later.

3. Much more objected-oriented design. Say for example you want to get the last modified date of a file. In Linux I'd use `stat` and somehow extract information from it. Or, `stat` may have some option to print mtime so I may have to google for it. In PowerShell, I can use this instead:

  $file = Get-Item C:\Windows\notepad.exe
  $file.LastWriteTime
This also applies to the process example above:

  $processes = Get-Process -Name chrome
  $processes[0].CPU
All of these are benefited by tab completion, so you can easily find what properties any object has. This greatly improves discoverabil...
You seem to have articulated all my thoughts perfectly.

The thing about parsing text is a very huge pain point for me because I've had some tool change their output (and unicode issues) which broke some scripts.

The structured nature of PS makes it very powerful and allowed me to write a script that checks the latest versions of some software upstream and tells me if there are updates. I have that on bash as well but it's comparatively unmaintainable.

i agree with the fact that PS object oriented communication between commands is much better then text. But I disagree about your point (2) saying that command names are more discoverable. with linux style conventions, there is a hierarchy that helps you navigate between command's features. for example `docker image ls` you can type docker, see that there is an images subtree, type docker images, see that there is an ls command, and run it. With Powershell you kind of have to guess and type `get-docker` and tab through commands. Also some times the verb is not easy to guess. So in terms not relying on documentation as you called it, I think PS is worse. That being sayd, once you do know the command you need, using it is much easier with PS as you nicely described. tip - if you liked tab completion, try ctrl+space :)
I was thinking more about the "proper noun" aspect of the UNIX commands. I mean, what do `awk`, `sed`, `tar`, `xargs`, `df` mean? Why does `free` only print the remaining memory, not the disk space? Why is `top` even related to processes? They are all like that because Unix has had a long way until today. In the beginning `grep` would have been enough, but suddenly someone wanted to improve the state of affairs, and made a new command named `awk`. Probably there had only been `ar`, and then later the necessity of `tar` was found. `free` is not `mf` and `df` is not `free`, because the original designer thought the free space of the main memory was more important. All these inconsistency/idiosyncrasy do make learning the UNIX command hierarchy harder. We developers don't feel that way because we all are very used to such commands, but there might be some memory in our inside when we tried really hard to memorize all of the useful commands just to do basic things.

PowerShell didn't have this backward compatibility concern so it built up its own vocabulary from the scratch. While it is nowhere near to perfect (as your example shows, the VERB-NOUN naming scheme can be a bit cumbersome when some functionalities need to be grouped), I'd say it is at least much more consistent regarding basic file/device management, because there was simply no baggage to consider when they designed PowerShell for the first time.

Ah, and thanks for suggesting `Ctrl-Space`! I thought it would have been better if PowerShell had a GUI widget listing possible candidates, so I was considering sending a patch. It turns out that the MS people are definitely more clever than me. :)

For one, I can do away with all of the text parsing that is prone to breakage in case a tool changes their output somewhat (or god help me - tools that can't handle unicode properly).

The power of bash actually comes from the GNU coreutils and other userland software. It has almost very little to with bash.

Try out bash on a busybox and feel the crippled effect.

So you mean PS as a scripting language, not as a shell, is superior. That's not a surprise, since it's newer and designed to do away with many annoyances of Bash. As a shell, however, it is sadly just slightly more usable as the REPL of, e.g., Python.
PS is great if everything you are dealing with is built for the .NET ecosystem.

It's less great otherwise.

This makes it often great for working on Windows, and definitely great for working with Windows and other MS software that is designed for the .NET/PS world.

Perhaps, but I find it very easy to interact with various webservices. We use powershell to call API methods on our load balancers, change AWS configuration, change DNS records and a variety of other things.
Yeah, the new Powershell will be very fast AFAIK. They had to do it because nano server was starting faster then Posh which was ridiculous.
On that note if you are a .NET developer you owe yourself to learn PS and how to write cmdlets, it's such a powerful and easy way to expose a CLI for your .NET app compared to stdio and command line arguments parsing - it's incredibly powerful and trivial to do.

Unfortunately most .NET devs are programmers who grew up with VB, RAD and GUI tools they don't understand the value of exposing UNIX like small functionality CLI commands over big monolithic services, GUI apps, etc.

I've been dabbling with PS (using it as my primary console) but my workflow just isn't that complex, so I don't have a compelling reason to write cmdlets (yet!).

Can you recommend a good tutorial?

I've used MSDN docs but I wouldn't call that a tutorial :)
The msdn docs are great, it's just difficult to navigate them. Perhaps this would help? https://msdn.microsoft.com/en-us/library/dd878294(v=vs.85).a... There's tutorials in there as well, but I didn't find them very useful compared to the overview/concepts documentation.
Yeah that's what I went trough as well but usually tutorials are shorter and more to the point, this is more reference/in-depth style - I'm guessing OP was looking for something along those lines.
I'm a .net developer, I still install cygwin/bash on my computer because I can write stuff quicker and better. PS get's incredibly verbose for anything non trivial. I learned powershell long before bash too.
Calling Powershell incredibly verbose is about the same as calling C# incredibly verbose.

Sure, perhaps they're not as compact as some of the incredibly information-dense perl scripts that people come up with.

I'd wager though that it's easier to understand what a random powershell script is doing than a random perl or bash script that pipes output throgh a dozen utilities.

I've got an example of powershell getting verbose here: http://flukus.github.io/2015/03/13/2015_03_13_Powershell-is-... . Ignore the rest and look at the example where I'm trying to copy a directory recursively and with a filter. In bash the same task is a relatively simple one liner:

  find . -type f -name '*.html' -exec cp {} /home/new_dir/{} \;
If you know a simpler way in powershell please post it though.
Well yes, that's an example that's relying on the find utility, for which the equivalent in the windows world (at least for file management) is robocopy.

    robocopy /r $pathFrom $pathTo *.html 

If you wanted to exclude say 'main.js' then it'd be:

    robocopy /r $pathFrom $pathTo *.html /xf main.js 
..and /xd is for excluding directories too.

I guess copy-item should be smarter to be able to handle this.

Also, for what it's worth, your example in the linked post is a bit more verbose than it really needs to be. You're comparing a full-up programming language to nant there. So yeah, it's a bit more verbose there. But I bet I can come up with a counter-example where nant is a giant nightmare to get right (or requires just dropping straight to executing external commands) (There's a reason I've killed off all usage of nant years ago, and gone to powershell for build scripts)

Well, how about this:

  ls . -r -file -fi *.html | cp -d /home/new_dir/
It is a bit shorter than your bash equivalent, still doing the same thing.

I think you're mistaken about what `cp` (`Copy-Item`) is intended to do. Its main purpose is to copy, not to filter. Yes, `Copy-Item` supports filtering because it's part of the "common parameters", but to be more in line with the cmdlets' original purposes, you should `ls` (`Get-ChildItem`) first, because it has more filtering capability, and then pipe the results to `cp`.

Is it complex? No, actually its complexity is exactly the same as that of your `find` example! `find` is more or less equivalent to `ls` in that both gathers the list of files that meet certain criteria. And then, like `find` invokes `cp` multiple times to do actual copying, `ls` (`Get-ChildItem`) feeds its result to `cp` (`Copy-Item`). They are structured in a similar way.

I'd even say the PS one-liner is more akin to "the UNIX philosophy". In the bash one-liner, there is a direct parent-child relationship between `find` and `cp`, which doesn't utilize pipes at all. Whereas the PS one-liner connects two equivalent processes (`ls` and `cp`) with a pipe. This is exactly what I'd call "small processes work together to get the job done", which is again the UNIX way.

Perl scripts can be vastly more powerful than PS. Perl is a full blown general purpose programming language with a massive collection of libs and frameworks.

It is however very powerful that Perl can be used in bash pipelines. But that is also true for any Unix tool that takes I/O.

So Bash is also very powerful with the help from all its friends that can be used with pipes. Shell native.

And you don't HAVE to code Bash in the most convoluted way possible. Sane code structure and naming goes a long way.

> Perl is a full blown general purpose programming language with a massive collection of libs and frameworks.

> So Bash is also very powerful with the help from all its friends

> you don't HAVE to code Bash in the most convoluted way possible. Sane code structure and naming goes a long way.

All of these things are also true for Powershell. Powershell can use any .NET Assembly, and if necessary make native windows system calls too if you really want.

Haven't really touched Windows the last 5+ years but adding .NET to the mix sounds a bit complicated in relation to Bash.
Like I said above, my point was that PS lets you expose your app logic a lot easier than writing a CLI for it.
I learned C# with a big fat book, and the command line compiler... I understand the usefulness of command line applications.

However, when I need more than what a simple shell script gives me, I'm more inclined to reach for node, ruby or python than C#/.Net ... the overhead for a quick scripting environment is quite a bit lower than having to setup a project and build requirements. I've done both...

Why node, is simply npm... create a directory, npm init, write my script, etc. reference it from an alias or .cmd in my ~/bin directory (added to my path). Then it works in windows, mac and linux which I use all regularly. PS is mostly windows.

Have you ever written a commandlet ? This is my point, regardless of how you feel in PS vs Bash or Python vs C# - exposing your application logic trough commandlets is incredibly simple and powerful - much simpler than doing a CLI app in other languages even with argument parsing frameworks in python and likes, commandlets let you pipe and return/accept .NET objects.

So my comment isn't PS everything or C# everything, it's if you're using C# to write a big fat monolithic app that has multiple isolated functionalities you can expose those fairly easily with PS.

I am surprised at the amount of semi-negative comments here. Yes, some features are yet to be implemented, (it's still a fairly young project and you can always follow GitHub issues on progress), but for an Electron app, it's surprisingly fast and capable.

The Microsoft-developed Go plugin makes it the best Go IDE out there, the devs, (Ramya Rao etc.) are super responsive and really trying to resolve issues quickly.

If you haven't tried it yet, I think you really should and if you have found a problem, open an issue at https://github.com/Microsoft/vscode so the devs know about it, complaining doesn't help making it better. They generally release every month, so it will get fixed sooner rather than later.

P.S. Kudos to the team & contributors for another awesome release!

How does it compare to LiteIDE?
I never understood LiteIDE, it was always extraordinarily esoteric and nonintuitive. VS Code is just fantastically better in comparison, in my opinion.
I have never heard of that, but I will share one thing I like about it as an IDE (and historically I have hated IDEs and used vim)... No config. Open a "folder", no project setup bullshit, and it remembers your work-state for each project/folder you open... And best part: autocomplete! But it is not heavy and slow. It does autocomplete per-file. So it does not need to analyse my entire project codebase, it just sees I used a word before and lets me tab to complete. So nice.
I loved LiteIDE when I used it, the VSCode extension can do most of what LiteIDE does but in a much nicer UI and control.
I concur, the Go plugin is top notch. It even has a fantastic vim emulation plugin that works reasonably well.
It does. The only things quirky about it: command mode "up" button doesn't know about the history of past commands... Sucky for iterating on a regex. Undo is also broken, but it took me 2 full months to notice that the vim plugin broke undo!
All editors support go really well, that's because go has official tools that integrate with editors (guru, for example).

At the top of the read me is the feature list for the vscode-go:

https://github.com/Microsoft/vscode-go

This is the feature list for vim-go:

https://github.com/fatih/vim-go

looks a little longer, but if you notice they both use the same back end tools. I see that VSC has partial delve integration, but vim running inside tmux makes delve (and every other CLI tool) feel like it's already integrated. I don't use debugging that much with Go though.

Yeah, I know they all make use of godef, guru etc. but the way VSCode allows you to see declaration/documentation or full implementation on hover, integration with dlv etc. make it a nicer implementation for me than vim-go, but that's probably because I am not a ViM person myself.
Anyone know if it works with the app engine runtime for go? I've never gotten anything to work for that except IntelliJ.
> makes it the best Go IDE out there

I will respectfully disagree and say that gogland (while still in a pre-release state) is much much better.

In what way is it better? Go in VSC is very, very nice. I can't think of any tooling I don't have available with this setup.
Gogland is great, but so far I haven't seen a feature that makes is strictly better, but I agree that it is a great alternative.

There is also the fact that VSCode is open-source.

IntelliJ is open-source as well and the Go plugin for it has been open-source for a long while as well :)
(comment deleted)
As an emacs user, it's interesting to watch the race of open source extensible editors like Atom and VSCode.

I still haven't been tempted to leave emacs, but it's great to see so much progress in the ecosystem.

I keep trying VSCode, but the main thing that keeps me going back to Atom is the fact that I have to do everything at the command line or by editing an enormous json file. Maybe I'm spoiled, but I'd much rather have a nice UI to deal with settings than have to figure out that, say, in order to show line numbers I have to modify "editor.lineNumbers" and set it to "on" (or is it "true"? or 1? I can't remember... let me go waste more time looking it up...)
While I agree that a real settings menu could be an improvement, they have made the settings experience better. They show a searchable annotated list of all the default settings on the left, and when you type a setting key in on the right it will show suggestions for possible values.

Looking at it just now, I also see that they added categories, and little edit buttons when you hover over a setting which allow you to click on what option you want. It's a bit strange to me that they're slowly turning a config file into a settings interface, but I guess it works fine for a Developer-focused product.

Well that's good to know -- in that case I'll give it another shot.
This is preciselly the reason I and many of my collegues love it - no GUI for settings. This means you can use hundreeds of tools to manage your settings and it is in true spirit of unix philosophy to keep everything as a text file.

Much more time is wasted by looking for options in GUI equivalent and reproducibility, sharing, backup and comparing (diff) are way harder or nonexistent. Creating frontend for it is trivial, but honestly, why drop from horse to donkey as they say.

All the apps should have settings like that.

Seriously, Ctrl+Shift+P and start typing gets me to what I need 99% of the time, it's glorious.

Combined with the VIM plugin and I rarely need to touch the mouse.

I didn't try vim plugin but in general, no vim plugin is substitute for vim.
If you mostly just want the memorized shortcuts to work, they tend to work OK in VSCode, Atom, IntelliJ and even Emacs - Spacemacs is even a better ViM for some.
As someone who did a fair amount of hacking in vimL, evil-mode is a drastically improved vim. It gets basically everything right, out of the box, and extending it isnt nearly as painful as using vimL or interacting with vim's Python API.
> It gets basically everything right, out of the box

Custom bindings don't work on the default document. That's a pretty big failure right out of the box.

And I still prefer vimL to lisp, it's the php of editor extension languages. It's not great for big plugins but ok great to slap things together quickly.

It doesn't, in my experience, get insert mode shortcuts like C-h right out of the box because it clashes with emacs' help mode functionality.
To your point, Atom allows both. Don't like the UI? Just edit config.cson or whatever directly! You're not locked into it.

I just find that if I have to go through a LOT more steps without a UI.

I would rather have devs invest time in serious functionality then doing stuff like GUI.

Otherwise, this quickly turns to nonsence such as Nano server image builder [1] because Microsoft is still babysitting people who CBB to spend few hours to learn Powershell basics and need a GUI that generate 1 liner script.

Microsoft should definitelly rise beyond click next culture.

[1] https://blogs.technet.microsoft.com/nanoserver/2016/10/15/in...

Discoverability and ease of use ARE serious functionality.
There are different ways to discover stuff. Powershell itself clearly proves that it can be done on system level without any GUI whatsoever.

We had the "ease of use" in GUI paradigm for decades and it didn't hold. Why don't you give it a chance as a text ?

Why do you want to limit yourself to only one way of doing things?
To be fair, the settings editor in VSCode shows all the settings possible in a split window with user settings, with neat categories and auto-completion. It's almost like a GUI setting dialog noways and makes it way easier to see what you have changed.
This: https://i.imgur.com/oPYr6Ch.png isn't discoverable?

The comments tell you in detail how each setting works (as you can see, they are even translated), you can search for a specific setting on the top, and it's categorized as well; defaults on the left, your own on the right.

No, wading through a huge text file is not discoverable.
How would you suggest that many settings be implemented in a GUI? It'd have to break them up into groups, and it appears that's exactly what VS Code is doing.
Just curious, is Atom's UI considerate about modifying the content of a configuration file? I'm tired of programs changing the structure of it willy-nilly without even notifying the user (e.g. a click in the toolbar implicitly loads the configuration file and saves it with a different layout). Is Atom OK with this?
This is a problem with Sublime Text too. Don't bother putting comments in your settings file, or rearranging its contents. One hit of Ctrl-minus, even by accident, and your config file is wiped out and replaced with an auto-generated one, which incidentally contains your updated font size. You're welcome.
Yeah, like many others I maintain my configuration files in Git, so having to use files to configure is a pro, not a con, at least for me! I haven't been using VS Code but this sole factor might be the reason I will reconsider using it in the future.

Some might say having both manual configuration and automated dialog would be better, but many such interfaces ruin the structures of my intentionally organized setting files. I will take no GUI than misbehaving GUI at any time.

This is one of the things I really like about VC, they just implemented their config editing largely the way they support any language: just a json-file (but with comments) which has full-blown intellisense, and offers you a complete example of the defaults side-to-side with clear examples and explanations.

It also allows you to override certain settings per project/directory, which can then easily be included in git (like files to exclude from the file view for a specific project, path/tool settings, indentation settings, ...)

I don't get that mindset at all. I can see desiring a file/command line interface for settings, but to want no GUI option at all for others is just strange.
The difference back in the years of old between running a Linux Server and running a Windows Server is one was GUI based and one is text based. I prefer text based a thousand times over. GUI is fine for single use but for text files it is a simple softlink and git away from having everything the same everywhere.

I use VS Code in three locations in three different OS and I love how it works the same everywhere because I just have text files.

I share your opinion on the settings and command line. While I like it to loads faster than full fledged Visual Studio, in a year or so of using it on Mac OS I still doesn't use even 1% of its features because they are not _discoverable_ at all. Modifying or doing anything beyond text editing require googling. The same apply for using langages extensions beyond syntax coloring. Even Intellisense does not works as expected out of the box so I don't use it.
> still doesn't use even 1% of its features because they are not _discoverable_ at all.

There are now categories in the settings file, a search bar and auto-completion, which should make discovery easier.

> The same apply for using langages extensions beyond syntax coloring.

Do you mean to say that extensions at https://marketplace.visualstudio.com/VSCode are hard for you to discover or that too much of your required functionality is in extensions?

> Even Intellisense does not works as expected out of the box so I don't use it.

If you have found a bug, it would be great to report it at https://github.com/Microsoft/vscode/issues

How often do you change these settings, though? I choose VSCode for the performance and great addons.
well, it's an editor for programming. those tools are usually all about typing text, automatically completing text, and validating text. appling those idea to a json config file shouldn't be allien to a programmer.
I use fancy autocompleting and validating text editor for exactly that reason - remembering if it's "on" or "true" or "yes" is too much overhead.

So yeah, json or (preferably) any other markup for settings is fine so long as it hints me with possible values as I type, tooltips each variable with its meaning and so on.

> so long as it hints me with possible values as I type, tooltips each variable with its meaning and so on.

VSCode does this and more. See sibling comments.

Take another look. What you get now is still a gigantic JSON file... except it opens in a two-pane window, with the default settings (including detailed documentation in comments) on the left, and your local copy on the right. And beside each setting on the left is an icon where, if you press it, it copies the setting into your local copy, with all the correct JSON syntax. And usually there's a dropdown showing the different valid options and it uses folding to divide neatly up into sections. Oh, and the settings instantly apply when you save the file.

To me, this combines the best parts of being a text file --- standard commands, formatting the way you like it, you can search it, version controllable --- with the best parts of a GUI --- prompting as to what options are available, easy selection of alternates, documentation, etc. It's an amazingly good implementation and I wish more applications used it.

(e.g. the comment for editor.lineNumbers now tells me that valid options are 'on', 'off' and 'relative', which counts relative to the line the cursor is on.)

Two things to add:

The settings files now have intellisense in them so you don't have to lookup each option.

You can also have a separate settings.json file for that project and check it into git inside the .vscode folder and make those same settings available to your entire team.

We use that in every project and it is great.

> I'd much rather have a nice UI to deal with settings than have to figure out that, say, in order to show line numbers I have to modify "editor.lineNumbers" and set it to "on" (or is it "true"? or 1? I can't remember... let me go waste more time looking it up...)

Maybe you've taken a look at it a while ago. It's still a big json file (great! everything at hand) but very easy to edit since it provides a lot of assistance: there's icons to set a new option, references for everything, and intellisense/autocompletion for the schema of every option you want to change. It'll even show invalid options with a squiggle (e.g. when some setting becomes deprecated).

IMO it's the best way to have settings in an app, especially when you can install extensions that adds settings of their own or when you want settings to be version-controllable.

I find it kind of funny that most screenshots are taken from MacOS :)
I use vs code for Go development and it's pretty amazing. Slowly starting to use it in other languages as well, but the Go support is really 5*.
How do you like working with Go? I've been meaning to start trying it out here soon, but haven't looked very far. I'm coming from a C# background.
I come from C#. Golang is nice and simple. I really miss generics. Going from the expressiveness of C# to golang is hard at first.
If you come from a C# background, it will feel a bit weird initially. You will more than likely miss generics, you might also miss the strong OOP model.

In the compiled world, I have somewhat of a background in C (haven't really done much with it in the last few years, though), so to me Go feels sort of like "C with a really strong std lib". I have really enjoyed the decisions they have made with the language, tbh, the people behind it have a proven track record. It's fun and very powerful, there is tremendous potential in it.

I miss all the libs available in C, but this is understandable due to the early age of the project. I also feel like it needs better package management (but I read that is a priority for this year).

I use it for F# and Nim and while there are some flaws, it's the best experience on linux for these two languages. It also lowers the bar to entry on other languages, e.g. Go, which is on my list of to-learns.
It's nice that they added an option to change the side of the close button. But way more important are sensible defaults, and that should be on the left side for mac os.

Still I am a very happy user of Visual Studio Code.