return to table of content

Show HN: Inshellisense – IDE style shell autocomplete

monkellipse
11 replies
21h41m

Great idea! Also terrifying :) Given how often I accidentally commit the wrong text in vscode, I shudder to think of the damage I could do with this on my shell, hah! What safety measures are there/could there be?

owlstuffing
9 replies
21h10m

Generally, a destructive shell command prompts for approval. But I suppose overfumbly fingers could still cause grief.

Type/command aware tooling is a night and day difference.

tombert
7 replies
21h4m

I feel like I've trashed millions of files I shouldn't have with `rm` and trying to be clever with regular expressions.

doubled112
4 replies
21h3m

I've done this enough times I use `ls` first, then `rm`

tombert
3 replies
20h41m

Yeah, I generally will use `find . -name "<my pattern"` nowadays, just so I can see all the potentially recursive files as well, and then when I'm 100% sure that what I'm doing is good, I will pipe that into xargs or parallel.

My point was that I don't feel like Unix really stops you from doing destructive scary stuff. It seems like it's perfectly happy to let you break your machine.

doubled112
2 replies
20h28m

Exactly, which is why we check for ourselves instead of expecting it to hold our hand.

Unixy tools tend do what you tell them, nothing more and nothing less. No confirmations, no output if successful, no progress bars, etc.

That's a feature in my mind, but I can see how it is easy to have your day ruined if you're expecting it to ask you again.

tombert
1 replies
20h25m

I mostly agree, but sometimes I wish that `rm` would have default to "confirm before destroying", and add a flag like `-y` to not prompt, more or less like how `apt` works on Ubuntu.

doubled112
0 replies
20h16m

That's actually a way better experience than no confirmation and confirming each item individually.

teddyh
1 replies
20h39m

Note: Normal shells use glob(7) expressions, not regular expressions.

tombert
0 replies
20h34m

You know I googled this immediately after I posted it, and you're absolutely right, but a good chunk of the syntax still kind of looks like regular expressions so I don't think I was too far off!

mksybr
0 replies
21h7m

Generally? Do you have examples in mind? The ones I think of are destroy first and ask questions only if told to do so: mv cp rm redirection tee

biellls
0 replies
21h24m

A simple approach might be that if the resulting exit code is not 0 it won't be used to complete in the future.

guessmyname
10 replies
21h39m

I wish they had written inShellisense in a more efficient programming language than TypeScript.

I recall disabling bash_completion.sh on my computer some time ago due to its negative impact on the startup speed of each iTerm2 session and the delay it introduced when using the <TAB> key for autocompletion.

Before I disabled this feature, I consistently experienced delays of over 300ms between triggering autocomplete and receiving the actual results. I must admit that this was on an Intel Core i7, so I assume the performance is much better with newer processors. However, even after more than two years without bash_completion.sh, I have already committed many command line tool flags to memory so I would only consider using a tool written in a compiled programming language that can provide autocomplete in 100ms or less, potentially requiring the inclusion of hardcoded information in the binary.

explaininjs
5 replies
21h16m

Don’t bring TypeScript into this. It is very possible to write sub 100ms procedures in TS, but an inelegant algorithm will be slow in any language, eventually.

cassianoleal
3 replies
21h1m

100ms is a long time to wait for each completion suggestion.

nu11ptr
1 replies
20h52m

I was going to say the same thing. In what world is 100ms fast on a computer? (for something not making a network round trip)

explaininjs
0 replies
20h49m

The claim isn’t that 100ms is fast, it’s that the blame for the latency lies in the engineering, not the language.

emorning3
0 replies
20h37m

Jakob Nielsen says that 0.1 second is about the limit for having the user feel that the system is reacting instantaneously, meaning that no special feedback is necessary except to display the result...

https://www.nngroup.com/articles/response-times-3-important-...

guessmyname
0 replies
21h0m

It is very possible to write sub 100ms procedures in TS, […]

I won’t dispute this statement since I currently lack the means to assess inshellisense. Would it be possible for you (or someone with a functional Node + NPM setup) to install inshellisense and share the actual performance figures? You could use a tool like hyperfine (https://github.com/sharkdp/hyperfine) for this purpose.

As an attempt to test this myself, I used a Docker image (version 21.1.0-bookworm from https://hub.docker.com/_/node/). The TypeScript tool installed without any issues, along with the binding, which simply adds the following line into ~/.bashrc:

    [ -f ~/.inshellisense/key-bindings.bash ] && source ~/.inshellisense/key-bindings.bash
However, when I initiated a new Bash session within the same Docker container to activate the updated Bash configuration, I encountered the following error:

    bash: /root/.inshellisense/key-bindings.bash: line 1: syntax error near unexpected token `$'{\r''
    'ash: /root/.inshellisense/key-bindings.bash: line 1: `__inshellisense__() {
Due to this issue, I am unable to perform a performance test using hyperfine.

The version of Bash available in this Docker image is 5.2.15(1)-release.

I verified that the content of /root/.inshellisense/key-bindings.bash is exactly the same as https://github.com/microsoft/inshellisense/blob/main/shell/k...

dlivingston
3 replies
21h13m

This was the first thing I noticed, too. Why TypeScript? Is it: a) efficient enough, esp. compared to a Bash/Zsh/PWSH alternative, that spawning a JS interpreter for each autocomplete is no biggie? Is b) TypeScript just much more efficient than I thought? Or c) is TypeScript Microsoft's hammer, and everything looks like a nail?

yoyohello13
2 replies
21h9m

I tend to think since VSCode plugins are javascript all new tooling from Microsoft seems to be written in typescript. As a non front end dev though `npm install` is an instant turnoff for me.

dlivingston
1 replies
20h56m

I agree. I was going to install and backed out when I saw `npm install` as well. I am wondering if my priors need to be updated, though (namely: JavaScript is slow, inefficient, and unsuited for anything outside of webdev).

yoyohello13
0 replies
20h44m

I think javascript is plenty fast these days. My only problem with Typescript/Javascipt is the toolchain is very complex/confusing to someone on the outside. In my experience, Rust/Go or even python is easier to get into if you're not living it every day. Besides familiarity, I'm not sure why someone would choose Typescript for non-web work.

Y_Y
6 replies
21h44m

Ya, cool name, but worse privacy than gorilla, more awkward than llm.sh and why would I ever get the Microsoft version of something I can get elsewhere without the worry that I'm about to be devoured by a corporate anglerfish.

smoldesu
5 replies
21h42m

Did you check the page? It's MIT-licensed and isn't about GPT or text generation. It's Intellisense, for the shell.

hui-zheng
4 replies
21h37m

then what makes it better than withfig/autocomplete?

wrs
0 replies
21h2m

That’s what it’s based on.

strbean
0 replies
20h52m

It is withfig/autocomplete. The only difference from their runtime is that this gives results directly in the console, instead of using a graphical overlay. I believe that means you could use this in an SSH session.

boxed
0 replies
21h35m

I downloaded fig, then immediately deleted it after it requested way too much access to my github account to even start. So... that's a big thing.

Timon3
0 replies
21h1m

It's available for Linux and Windows.

Too
5 replies
12h2m

This is cool.

What is sad is that it has to rely on a library of completion specs. It shows what kind of stone age foundations we are building on top of. The world would have been a much better place if CLIs themselves defined strict interfaces using standard data structures. Not only for auto completion, also gives much more accurate error checking of bash scripts. Same goes for data piped in and out of command.

runeks
1 replies
11h15m

The world would have been a much better place if CLIs themselves defined strict interfaces using standard data structures.

Well it's not too late just yet.

How about if all CLI exes had an option, say --dump-cli-options, that wrote out a spec of the supported commands/flags/options?

Something like e.g. Python's argparse should be able to effortlessly spit out this info (and the same for other similar argument parsing libraries).

runeks
0 replies
11h4m

And we would also need an options that does CLI argument parsing only, and either returns an error related to parsing one or more options or "ok".

This could be used to do "form validation" of CLI args as they're typed in the shell.

erezsh
1 replies
10h23m

It's sad. If the world of software had better coordination and cooperation, we would be able to get so much more done. Instead we're constantly dumping and re-parsing the same data, re-implementing the same protocols and algorithms in dozens of different languages, each time with different quirks. Fixing the same bugs again and again.

Eisenstein
0 replies
9h22m

All we need is something that will tell us who is right and then impose that vision on everyone.

pests
0 replies
1h15m

Like PowerShell?

Dudester230602
4 replies
21h11m

1980s... but like 2020s-style.

Coming next: auto-complete for punch cards.

leshenka
2 replies
21h0m

can you expand on this?

askiiart
1 replies
20h50m

I think they meant "using the terminal (1980s)... but like 2020s-style (intellisense)"

Y'know, because it's not like tons of people use the terminal on a daily basis in the modern era. /s

Dudester230602
0 replies
20h27m

Yeah, they claim because it's better but the reality is that they simply cannot build good cross-platform UIs on a budget / on time.

dang
0 replies
20h16m

Could you please stop posting unsubstantive comments and flamebait? You've unfortunately been doing it repeatedly. It's not what this site is for, and destroys what it is for.

If you wouldn't mind reviewing https://news.ycombinator.com/newsguidelines.html and taking the intended spirit of the site more to heart, we'd be grateful.

mschrage
3 replies
21h8m

Co-founder of Fig here! Just want to say that I think this is awesome.

It’s really cool to see alternative implementations of IDE-style autocomplete in the terminal. Nice work!

trey-jones
0 replies
20h55m

I'm pretty sure this is just a wrapper for Fig.

nextaccountic
0 replies
20h37m
curiousgal
0 replies
20h50m

Looking at the main author's gorhub profile, they forker Fig's repo.

efitz
3 replies
18h55m

So I have to take a shell dependency on Node.js?

Hard pass

preciousoo
0 replies
15h56m

Maybe the users don’t care about their devices

pelagicAustral
0 replies
4h52m

Haha, I though the same...

npm install

NEXT!

creatonez
0 replies
12h59m

I don't mind it, it's just another runtime that works on Linux and BSD. I have my neovim infected with extensions made in Node.js, Python, Lua, my weechat is infected with extensions made in Python, Perl, Node.js, and my zsh is infected with extensions with components made in Rust, C, and Python. Just make sure to pay attention to shell start times and RAM usage.

dolmen
2 replies
17h57m

The implementation has obviously never been run on a Unix/Linux:

* shell config is created with CRLF https://github.com/microsoft/inshellisense/issues/8

* changing directory doesn't work https://github.com/microsoft/inshellisense/issues/5

white_dragon88
0 replies
6h28m

Inshellishit lol

suavesito
0 replies
17h8m

It doesn't work on Windows either... at least by a comment in the issue. I don't have Windows.

chrysoprace
2 replies
17h24m

It's pretty cool but still seems a little rough around the edges. My simple test case was to launch into the shell and see if it loaded any of my normal shell configs like highlighting or auto-suggestions (based on my history) but it seems to just be its own shell entirely. It also doesn't seem to play nicely with `zsh` since I tried to do a `..` (which is a common `zsh` alias for "cd .." which got a `zsh:1: permission denied: ..` and then I tried to run `cd ..` it did nothing.

Keen to see how this pans out though!

dbtc
1 replies
17h14m

stock macos zsh's `..` just gave me 'zsh: permission denied: ..'

zsh 5.9 (x86_64-apple-darwin22.0)

chrysoprace
0 replies
14h30m

Yep it's not stock `zsh` alias, so that suggests to me then that Inteshellisense isn't reading my shell config at all.

Night_Thastus
2 replies
21h35m

I'd be curious how this compares with Fish, which has autocomplete as well. It's worked fantastic for me so far. Once you have it, it's hard to go back!

boxed
1 replies
21h30m

This looks much cooler than fish autocompletes imo. But this replaces the nice fish stuff with `>` as a prompt, so I'll stick with fish.

schmorptron
0 replies
20h50m

The readme for this project states that it supports fish, does it replace the prompt?

100k
2 replies
21h47m

The name is terrific.

rewgs
0 replies
8h57m

First good name to ever come out of Microsoft. I'm sure it just barely succeeded over Visual Windows Subsystem for IntelliSense Core.

exikyut
0 replies
21h17m

The fact that it's coming from Microsoft is even crazier, because obviously you know they had to go through clearance - and made it.

I half wonder if the author checked the name first, then started coding......

ssijak
1 replies
11h2m

I use Fig which also has this and it seems to be better at it

ghqst
0 replies
4h6m

This is using the same library as Fig for autocomplete, but cross -platform and without requiring an account.

k8svet
1 replies
19h57m

Beyond the not-using-typescript for CLI tooling difference, it would be interesting for a comparison against carapace-bin, another shell agnostic completer: https://github.com/rsteube/carapace-bin (written in Go, since this thread includes other discussion about the choice of typescript for Inshellisense).

From a quick peek, carapace-bin supports more shells (including and powering the one I use, nushell).

mongol
0 replies
18h28m

Knowing it is go I like it better already. Anything that does not require a runtime gets a head start in my book.

jss326
1 replies
20h15m

I get this error on zsh: Unsupported shell: '', supported shells: bash, powershell, pwsh, zsh, fish

dclowd9901
0 replies
20h11m

You need to run it with the —shell flag and provide “zsh” as the value

hiAndrewQuinn
1 replies
11h14m

Alternatively, if you simply wish to occasionally bring Copilot into your shell, you should know that Ctrl+X Ctrl+E (on bash) / Alt+E (on fish) will open your current shell line up in $EDITOR, which you may set to Vim or Neovim.

From there, :wq will drop the text back into your command line. If you have Copilot set up in either of those, then it will also work here.

I know from working on https://github.com/hiAndrewQuinn/shell-bling-ubuntu that Neovim's LazyVim setup now supports Copilot out of the box now. I never had much trouble setting up the Vim plugin either. YMMV.

lloeki
0 replies
10h38m

If using bash in vi mode instead of emacs mode: ESC v.

zsh starts minimal, so one needs the following for such a feature to be operational:

    # enable
    autoload edit-command-line
    zle -N edit-command-line

    # bash-like emacs mode shortcut
    bindkey "^X^E" edit-command-line
    # bash-like vi mode shortcut
    bindkey -M vicmd v edit-command-line
filterfiber
1 replies
21h13m

Is this fully local? I glanced around and didn't see any mention of chatgpt/gpt/codex so I'm thinking it is?

trey-jones
0 replies
20h57m

There is really not much code to speak of, and a quick perusal didn't yield anything sus. Initial guess is that it's not very efficient, but I really didn't look that closely.

boxed
1 replies
21h32m

I wish I had something like this without it replacing the shell prompt with `>`.

all2
0 replies
19h31m

I'd guess you could source it and then override the PS1 env variable with whatever prompt formatting you wanted.

bestest
1 replies
20h36m

ok. can someone explain to me. I've been using ctrl+r for god knows how long and it solves all my shell completion needs.

is inshellisense for average users like me or more advanced users?

serial_dev
0 replies
20h23m

I use zsh plugin, autosuggests, and ctrl r, too.

Ctrl r is okay and it is a very convenient if you already typed the command.

Inshellisense seems to help with knowing what subcommands, flags and file paths are available, and it even provides a small docs helper for the flags and commands.

If you didn't try these tools, I'd encourage you take a look, it helped me a lot, especially when I work with tools whose commands I don't know by heart or used a while ago.

xnx
0 replies
20h55m

Starting to type "dir": "d[el /q /s .]" (press any key to accept)

theusus
0 replies
12h17m

Not up to the mark with https://github.com/marlonrichert/zsh-autocomplete which works contextually.

pbbakkum
0 replies
19h5m

If you're interested in GPT-powered shell autocomplete, check out https://butterfi.sh

This also enables shell-aware LLM prompting!

orliesaurus
0 replies
19h8m

i use warp's terminal and i love it, but I think im gonna love this more because its OSS

keyle
0 replies
17h15m

Is anyone else feeling off about typescript in the terminal emulator? I guess it's not worse than TCL or Perl.

kermatt
0 replies
18h12m

IDE style shell autocomplete for JavaScript or TypeScript programers

Because otherwise requiring `npm` as a package manager for those of us who don't develop in either is silly.

(Yes, I know npm also implies JavaScript as a runtime environment, still nope)

jameslk
0 replies
19h16m

This looks awesome! Is the next step something like a Copilot integration?

There’s Copilot CLI coming soon[0] but I think something that autocompletes would feel more natural most of the time.

0. https://githubnext.com/projects/copilot-cli

ilc
0 replies
19h18m

For those who haven't read the code:

This reuses Fig.io's internal completion engine to actually get the job done.

Because of that, it forces the language choice of Typescript, and the heavy lift is done by Fig's engine.

I hope the OP continues with the work and improves it. I was looking forward to trying Fig on Linux. This sounds like a step towards that.

cvak
0 replies
7h3m

Fig.io with no account and calling home, count me in.

cpendery
0 replies
16h9m

Thanks for everyone creating issues. I'm working on addressing all the issues and they'll be included in the next release.

classified
0 replies
4h50m

Connecting NPM-powered software directly to my shell? Over my dead body.

HomeDeLaPot
0 replies
21h37m

Awesome! And it supports fish! Just the other day, I was wishing we had something like this.