
Fish 2.0 shell beta - izietto
http://ridiculousfish.com/shell/beta.html
======
ridiculous_fish
Lead dev here. Reading the comments is thrilling and makes me even more
excited for the official fish 2.0 release, which will be in a few weeks.

For me, the as-you-type suggestions and syntax highlighting make fish feel
active and responsive, providing instant feedback. I've also had a great
response from casual command line users, who love that features like git tab
completions just work, with nothing to configure.

It's going to be a fantastic option for command line users. Meanwhile the
action is on the github page at <http://github.com/fish-shell/fish-shell/>

~~~
StavrosK
Man, I've been using fish as my primary shell for years now, and I just love
it. I'm terribly excited about this release. Are there going to be debs for
x86/amd64, or maybe even a ppa?

~~~
izietto
fish 2 pacakges (including debs) are already available:
<http://download.opensuse.org/repositories/home:/siteshwar/> but I would
prefer to have an APT conf line too :-)

~~~
siteshwar
APT conf line has following format :

deb
[http://download.opensuse.org/repositories/home:/siteshwar/Ub...](http://download.opensuse.org/repositories/home:/siteshwar/Ubuntu_\[version\])
./

So for e.g. if you're on Ubuntu 12.10 use :

deb
[http://download.opensuse.org/repositories/home:/siteshwar/Ub...](http://download.opensuse.org/repositories/home:/siteshwar/Ubuntu_12.10)
./

~~~
izietto
(for importing the key: curl -sL
[http://download.opensuse.org/repositories/home:/siteshwar/Ub...](http://download.opensuse.org/repositories/home:/siteshwar/Ubuntu_\[Version\]/Release.key)
| apt-key add - )

------
GhotiFish
Something about this shell interests me. I just CANT put my finger on it.

edit: Jokes aside, this is a nice shell, there are no videos of youtube for it
though, I should go through the doc's and record one.

edit2: OK I just tried playing around with the shell. It's got some really
nice features, but then I said to myself "hey, lets try doing some work with
this, I'd like to get rid of fedora 18's neutered package management GUI and
replace it with yumex."

ok easy enough, whoops I forgot to use sudo.

sudo !!

    
    
       ghoti@localhost ~/Videos> sudo !!
       [sudo] password for ghoti: 
       sudo: !!: command not found
       ghoti@localhost ~/Videos [1]> 
    

oh... ok... docs?

here it is, right at the very end of the documentation.

    
    
      "Because history substitution is an awkward interface that was invented 
       before interactive line editing was even possible. Fish drops it in favor of 
       perfecting the interactive history recall interface. Switching requires a small 
       change of habits: if you want to modify an old line/word, first recall it, then 
       edit. E.g. don't type "sudo !!" - first press Up, then Home, then type "sudo "."
    

.... WHAT?!

ridiculousFish, you arn't kidding around with that name are you?

~~~
Camillo
It's perfectly reasonable. There is already an interface for recalling
previous commands, and an interface for editing the command line. Combining
them to issue a variation of a previous command is the logical thing to do.
Having a completely wacky alternate syntax for the specific operation of "put
the whole previous command in this place surrounded by new text" is a wart.
It's like the irregular English syntax that you hate so much, except that in
this case there's still time to fix it, because bash hasn't been around that
long.

~~~
GhotiFish
Perfect! I love regular syntax!

For example, Lojban uses a method of saying phonemes to describe words, like
Hebrew, so the number 100,508,290 is just an utterance rather than a sentence.

    
    
      panono k'io munobi k'io resono
    

Rather than

    
    
      One hundred million, five hundred and eight thousand, two hundred and ninety.
    

consistent, simple, fast, unambiguous. numbers are a common occurrence, so
they should be fast to speak, So when the extremely common occurrence of me
forgetting to include sudo for a command that requires escalated privileges, I
expect that task made easier.

As an alternative, think of it like this. the specific operation of "put the
whole previous command in this place surrounded by new text" is actually a
common idiom in calculation programs. Commonly called "ans". Mathmatica
actually marks the results of all its computations with a tag (I think t[n])
so you can recall arbitrarily.

That's not to say I'm a stick in the mud, if "sudo !!" sucks, make it better!

How about something that turns a command into a postfix command? Or actually
having a hotkey recall the previous command? Maybe a hotkey that looks at the
text in the argument then searches up the history to replace? so if I type
sudo rm^U it takes 'rm' and searches up history, replacing it with the first
match, "sudo rm -rf ~/opt/java"? Lots of possibilities!

~~~
Camillo
How about you just press up arrow to recall the previous command, ctrl-A to go
to the beginning of the line, and then type "sudo "? It's the same number of
keystrokes as typing "sudo !!". And I'm sure you can use something other than
up arrow to recall the previous command if you don't want to take your fingers
off the home row.

~~~
GhotiFish
the reasons are legion.

Up and ctrl A are independent key strokes. They precede typing sudo, which is
a logical train of thought ("Oh I forgot sudo, i should of typed sudo and then
x").

! is a commonly used key in English language, and pressing it twice is fast,
where as getting two desperate keys is not.

After the proposed action, you end up here:

    
    
      sudo |something fishy
    

as opposed to here:

    
    
      sudo something fishy|
    

which prevents you from writing an addendum to that command.

This sounds small, but I was doing what you suggested before I found out I
could say "sudo !!" I immediately switched when I found out, and it's now a
very common idiom for me. I switched from "up home sudo space" to "sudo space
bang bang" for all the reasons described above.

------
sciurus
Anyone looking at fish may be interested in the design document, "a
description of the design principles that have been used to design fish". The
principles are

    
    
      The law of orthogonality
      The law of minimalism
      Configurability is the root of all evil
      The law of user focus
      The law of discoverability
    

<http://ridiculousfish.com/shell/user_doc/html/design.html>

~~~
ash
"The law of minimalism" was recently changed to "law of responsiveness":

<https://github.com/fish-shell/fish-shell/issues/612>

------
mixmastamyk
A way to move to fish gradually is to use it on your local machine
(interactively) but still write scripts in bash and stick to bash on remote
hosts. This helps keep you in sync with others.

One drawback is keeping your aliases in sync, but once done it is not much
work.

~~~
thomasjames
This is what would be keeping be back I think. I spent too much of my day in
remote shells on systems where I do not have root. This shell looks really
cool, but I am afraid that I would come to depend on its features and thus
lose my bashfu skills in the process.

------
sdfjkl
I've been using Fish for close to a year now and I can't go back. It's subtly
making my shell better without getting in the way. You don't notice it very
much, until you have to use a machine without it - at which point you will
miss it sorely.

------
X4
It was so much fancier than ZSH which I've been using pretty throughly for
years, but I wasn't impressed until I used a oh-my-fish like "framework". Now
with a bump to ><<<+> 2.0 I'll give it a go again!

<https://github.com/bpinto/oh-my-fish>

------
reledi
If I switch from bash to fish, will anything break (e.g. aliases, scripts,
keyboard shortcuts, etc.)?

~~~
adwf
Scripts will still work as long as they have the standard #!/bin/bash at the
top.

Aliases - in .bashrc - unfortunately will need to be replaced by Fish
functions; defined in the "~/.config/fish/config.fish" file by default.

The only real thing that keeps tripping me up with Fish is that it doesn't
support shortcuts like "!$ ". I keep on typing that in, but due to the nature
of Fish, it can't (or won't) recognise it. But the excellent history
functionality does make up for this a fair bit.

Having said that, Fish is by far the best shell I've tried. I gave zsh a go
for about half a year and got fed up with the autocompletion and general
slowness. As a shell, Fish just behaves quickly and fairly naturally, with few
exceptions (!$ ...).

I highly recommend it as an improvement over bash.

~~~
kbd
> I keep on typing that in, but due to the nature of Fish, it can't (or won't)
> recognise it. But the excellent history functionality does make up for this
> a fair bit.

I was interested in this comment so I looked into the documentation to find
out why this is. Here's a link to the FAQ for anyone else interested:

[http://ridiculousfish.com/shell/user_doc/html/faq.html#faq-h...](http://ridiculousfish.com/shell/user_doc/html/faq.html#faq-
history) (last question)

~~~
nemo1618
that works just as well I guess. But what if I want to make an alias for "sudo
the last command"?

~~~
kbd
[https://github.com/fish-shell/fish-
shell/issues/288#issuecom...](https://github.com/fish-shell/fish-
shell/issues/288#issuecomment-11233013) has some options.

~~~
pooriaazimi
Wonderful!

I made a slight variation (and also posted it there):

    
    
          function .runsudo --description 'Run current command line as root'
            set cursor_pos (echo (commandline -C) + 5 | bc)
            commandline -C 0
            commandline -i 'sudo '
            commandline -C "$cursor_pos"
          end
          bind \es ".runsudo"
    

Instead of outright `execute`ing the command, the above would save the cursor
position. You can (theoretically) bind `\cs` so control-s adds the sudo
(instead of option-s), but I couldn't get it to work.

------
apricot13
Don't you mean "Fish 2.0 shell betta"?

~~~
sdfjkl
Huh? Oh.

 _"Betta (pron.: /ˈbɛtə/) is a large genus of small, often colorful,
freshwater ray-finned fishes"_

------
qznc
I would like to have UndistractMe [0] for fish. However, I am not sure if it
is possible to hook into or wrap command execution. You know a command has
finished, when a new prompt is shown. However, how do you start the clock?

Tried posting this to the fish mailinglist, but moderation pending for weeks
now.

[0] <http://mumak.net/undistract-me/>

~~~
qznc
Created an issue <https://github.com/fish-shell/fish-shell/issues/672>

------
naranja
I once tried fish 1 year ago by "accidient". Got instantly addicted. Why do
other shells have to be so akward? It totaly clear to me, that bash & co
frightens people from using CLI.

Instantly switched to fish. Never looked back.

------
srijan4
Does anyone know how to initially import zsh's history into fish?

------
omaranto
Is this a fork of the other shell named fish? I use a shell also named fish
with the same syntax as this one, but whose development stopped a few years
ago.

~~~
mixmastamyk
Yes, the one packaged in Linux distro's is 1.23.X. Last I heard on the mailing
list, the original author was jazzed someone new picked it up.

------
orefalo
Where is the feature list? do you have screenshots?

I know it's hard with a CLI, but still if it's colorful better show the
baby...

~~~
scotth
<http://ridiculousfish.com/shell/index.html>

------
emdagon
This looks awesome!, I'll definitely try it! (the color configuration approach
is very clever)

------
X4
Can't find 2.0 in the Gentoo repos.. anyone like to share his ebuild?

~~~
siteshwar
[http://download.opensuse.org/repositories/home:/siteshwar/Ce...](http://download.opensuse.org/repositories/home:/siteshwar/CentOS_CentOS-6/)

For anyone else having problems finding native packages for Linux, I am
building packages for several Linux distros at
<http://download.opensuse.org/repositories/home:/siteshwar/>

------
oblio
Does it work with Cygwin?

