Elvish playground

Elvish is a friendly and expressive shell for Linux, BSDs, macOS and Windows.

Powerful Pipelines

Text pipelines are intuitive and powerful. However, if your data have inherently complex structures, passing them through the pipeline often requires a lot of ad-hoc, hard-to-maintain text processing code.

Pipelines in Elvish can carry structured data, not just text. You can stream lists, maps and even functions through the pipeline.

~> curl https://api.github.com/repos/elves/elvish/issues |
     from-json | each $explode~ |
     each [issue]{ echo $issue[number]: $issue[title] } |
     head -n 11
366: Support searching file from elvish directly
364: Ctrl-C in elvish kills Atom in background
357: Asynchronous syntax highlighting
356: In web backend, run commands with pty IO, not pipe
354: Support multi-line prompts from byte output
353: Completers should detect context in a top-down manner
352: Quoted command names are highlighted randomly
351: keep navigation mode open after command
350: Raw mode requires two presses of ^V
344: Elvish won't compile
343: Possible to suppress job control messages?

Intuitive Control Structures

If you know programming, you probably already know how if looks in C. So why learn another syntax?

Control structures in Elvish have an intuitive C-like syntax.

~> if $true { echo good } else { echo bad }
good
~> for x [lorem ipsum] {
     echo $x.pdf
   }
lorem.pdf
ipsum.pdf
~> try {
     fail 'bad error'
   } except e {
     echo error $e
   } else {
     echo ok
   }
error ?(fail 'bad error')

Directory History

Is cd /a/long/nested/directory the first thing you do every day? Struggling to remember where your logs and configurations?

Elvish remembers where you have been. Press Ctrl-L and search, like in a browser.

~>                                           xiaq@xiaqsmbp
 LOCATION  
  * ~                                                     
  * ~/go/src/github.com/elves/elvish                     
110 ~/on/elvish-site/code                                
 62 ~/on/elvish-site/code/src                            
 52 ~/go/src/github.com/elves/elvish/edit                
 34 ~/on/elvish-site/code/tty                            
 33 ~/on/elvish-site/code/assets                         
 32 ~/go/src/github.com/elves/elvish/eval                
 26 ~/on/chat-app/code                                   
 24 ~/on/elvish-site/code/dst                            
 20 ~/go/src/github.com/elves/md-highlighter             
 14 ~/on/chat-app/code/public                            
 13 ~/.elvish                                            

Command History

Want to find the magical ffmpeg command that you used to transcode a video file two months ago?

Just dig through your command history with Ctrl-R. Same key, more useful.

(To be fair, you can do this in bash with history | grep ffmpeg, but it's far fewer keystrokes in Elvish :)

~>                                           xiaq@xiaqsmbp
 HISTORY  
13345 make tools/ttyshot                                 
13346 make                                               
13347 ./assets/                                          
13348 ls                                                 
13349 ls                                                 
13350 rm *.png                                           
13351 git st                                             
13352 ..                                                 
13353 git st                                             
13354 git add .                                          
13355 git st                                             
13356 git commit                                         
13357 git push                                           

Built-in File Manager

Power of the shell or convenience of a file manager?

Choose both. Press Ctrl-N to quickly navigate directories and preview files, with full shell power.

~/go/src/github.com/elves/elvish>            xiaq@xiaqsmbp
 NAVIGATING  
 elvish           CONTRIBUTING.md    FROM golang:onbuild 
 fix-for-0.7      Dockerfile                             
 images           Gopkg.lock       
 md-highlighter   Gopkg.toml       
                  LICENSE          
                  Makefile         
                  README.md        
                  cover           
                  daemon          
                  edit            
                  errors          
                  eval            
                  getopt          

Next steps

You can explore the official Elvish website or the project on GitHub.

You can also improve this playground or create your own. Please send a PR or open an issue in github.com/rootnroll/library.