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.
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.
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.
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.
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.
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.
<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>
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.
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.
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 ;)
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. :)
The project itself is a fork of the popular term.js which is now unmaintained, we've taken it quite far since then. Hyper are probably going to be making a switch once a few more kinks are worked out too https://github.com/zeit/hyper/issues/1275
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.
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
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.
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).
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.
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.
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.
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.
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.
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.
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.
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.
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...
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?
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)
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.
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.
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.)
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.
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).
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.
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.
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.
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.
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 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.)
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:
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:
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.
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!).
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:
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)
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.
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!
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.
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!
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.)
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.
> 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.
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.
311 comments
[ 3.2 ms ] story [ 301 ms ] threadFor 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's a years old Chrome bug. Wish they had a Chakra version of Elektron.
I always use 15pt Fira Code
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.
Do you also criticize Chromium's font rendering? Maybe you are just looking for things to complain about?
However on Linux it does, so this sounds like a broken fontconfig setup, or a toolkit not getting the right hinting config.
https://github.com/Microsoft/vscode/issues/329#issuecomment-...
This comment is a long-winded compliment.
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!)
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.
Atom and WebStorm felt rather clunky. Sublime was super fast, but somehow lacked behind in new features.
VSCode is a revelation for me :)
Agree - VSCode is such a good IDE, I'm constantly seeing it replace editors other devs have relied on for some time.
---
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.)
https://code.visualstudio.com/updates/v1_9#_workbench
You can read more about the specifics if you're interested in https://github.com/Microsoft/vscode/issues/17875
I also liked the name of the project, xterm.js. :)
The project itself is a fork of the popular term.js which is now unmaintained, we've taken it quite far since then. Hyper are probably going to be making a switch once a few more kinks are worked out too https://github.com/zeit/hyper/issues/1275
Thumbs up for this, Daniel. Thanks.
I am very happy that this is solved.
That being said, it's nice that they're improving it still
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 supports tasks that you can configure to build your application, and natively understands the output of MSBuild, CSC, and XBuild.
(To be clear I'm asking what workflow users use personally, since it seems like nobody else has this issue.)
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).
If you attach or launch more than one process, that's where they will appear also, as top-level tree nodes.
Samsung and Asus ones seem to have been the surviving brands and even they have Win10 devices on their brand sections.
Or the fact that all new APIs are mostly UWP only?
That could just be a regional anomaly.
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.
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.
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.
I've just seen most comments referring to it as an IDE.
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.
It has has debugging and task running, after all. Sounds a lot like an IDE.
I wonder what someone coming from an earlier era would have to say on that...
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.
Or maybe put differently, IDE's are enterprise software, editors are agile startups?
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 loved VS, but pro much stopped using it after starting to use VSC.
(not that I'll stop using it, I'm sure someone will fork if gets too obnoxious)
My guess is that they will up-sell to a version with bundled plugins which offer turnkey integration with Azure.
Historically speaking, Microsoft will break compatibility when it suits them.
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.
Sorry, not saying you are but man MS is guerilla marketing VSCode like I've never seen in an opensource developer product.
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.
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.
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.)
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.
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'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).
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 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.
As a Linux dweller, I'm genuinely curious about this one. I've found PS inferior in just about any use case.
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)
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...
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:
If I want to extract CPU time and process ID: Let's see what processes consumed the CPU most! 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:
This also applies to the process example above: All of these are benefited by tab completion, so you can easily find what properties any object has. This greatly improves discoverabil...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.
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. :)
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.
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.
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.
Can you recommend a good tutorial?
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 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)
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.
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.
> 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.
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.
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.
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!
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.
I will respectfully disagree and say that gogland (while still in a pre-release state) is much much better.
There is also the fact that VSCode is open-source.
I still haven't been tempted to leave emacs, but it's great to see so much progress in the ecosystem.
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.
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.
Combined with the VIM plugin and I rarely need to touch the mouse.
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.
I just find that if I have to go through a LOT more steps without a UI.
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...
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 ?
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.
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.
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 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.
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
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.
VSCode does this and more. See sibling comments.
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.)
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.
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.
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).
Still I am a very happy user of Visual Studio Code.