elvish 0.18 简易评测

“国产XXXX”有一种冒犯elvish的感觉。如果我自己的项目流行了,我希望别人知道这个项目的最初的作者是Born in China的,但这个项目的参与者是全世界的。

1 个赞

rm alias 不好。其实有 tmutils localsnapshot 就行了,然而系统更新后觉得没必要一直忘开。

关于为什么 alias rm 不好

2 个赞

好几年前有人把 scsh 移植到 Guile,烂尾了,但还是能用的。

当时x乎上一堆BB"国产编程语言"和"中文编程的",我也就是开个玩笑。

nu 很吊,很花,他的 scripting language 我印象中常常变的

warning: use `let-env config = ...` instead of `let config = ...`
     __  ,
 .--()°'.' Welcome to Nushell,
'|, . ,'   based on the nu language,
 !_-(_\    where all data is structured!

Please join our Discord community at https://discord.gg/NtAbbGn
Our GitHub repository is at https://github.com/nushell/nushell
Our Documentation is located at http://nushell.sh
Tweet us at @nu_shell

It's been this long since Nushell's first commit:
3yr 8month 4day 21hr 36min 45sec 414ms 617µs

You can disable this banner using the config nu command
to modify the config.nu file and setting show_banner to false.

let-env config = {
    show_banner: false
    ...
}

iterm2 上 nu 的行为挺怪的,他的特效有点问题

Rash 是 2017 年的项目……Elvish 2013 年就开始写了(edit: 看到下面有人指出了)。

Rash 的东西我简单看过一点,感觉他们还是主要在做一些形式化的东西,不是很注重语言设计和 UX 的(博士论文导向……)。

Elvish 确实是精神 Lisp,所以用了一个 lambda logo。Racket 的影响有一些(其实应该说是 Scheme 的影响),但是 Elvish 主要借鉴的还是 Clojure 的数据结构。

不是不加特性,是不会删特性

1 个赞

哈,关于 1 和 3 愿闻其详

关于为什么 namespace 不好: 准确来说是 namespace 影响到 shell 的自动䃼全了,想䃼全命令出来的却都是某 namespace 里的,哪怕不是语法上,至少编程规范上带 namespace 的 function 最好能和不带的区分开来,比如都以大写或以符号开头。

或者䃼全行为上可以改成除非已经打完了 namespace 和 : 䃼全才会给 namespace 里的內容。


3 的话主要是我在 POSIX shell 里最常用的 parameter substitution,用 re: 写的话太 verbose,而且似乎没有了从头/尾匹配的功能。

Re namespace: 这个目前的行为就是这样的?比如说你 use re 之后打 r 是不会出 re: 里面的命令的,只有打 re: 才会出

Re parameter substitution: 不知道你指的是哪种?POSIX shell 里面的 ${var:-default} ${var%foo} 这些都属于 parameter substitution。Elvish 里面确实没有直接对应的,但是自己写函数很简单。

比如模拟 ${var:-default}

fn default-to {|a b| if (eq $a '') { put $b } else { put $a } }

模拟 ${var%foo} 如果不需要 pattern matching 的话可以用 str:trim-suffix,如果需要的话可以写一个:

fn trim-re-suffix {|s suffix| re:replace $suffix'$' '' $s }

我个人感觉 POSIX shell 里面的 parameter substitution 的语法和语义都特别难记,而且也不是天天都要用到,verbose 一点更好。好奇你为什么觉得这个会影响 Elvish 作为 shell 的可用性。

可能我用的是旧版本的原因,用 HEAD 试了下,能改成这样实在太好了。

我常要跑图片处理工具,所以多少要经常用到 ${var%.jpg}.pgm 之类的,至于用法 man mkshman ksh 给得很易懂。

倒是之前从没发现 evlish 的 re: 可以用 ^$ ,汗

主要是 rm -rf ~ 给我的心理创伤有点大,现在用了一段时间 ksh 体会到其不好的地方,我可以继续用 elvish 了。

Welcome back :slight_smile:

改扩展名可以在 rc.elv 里面放一个

use str
fn chext {|s old new| put (str:trim-suffix $s $old)$new }

然后 chext foo.jpg .jpg .pgm 就会输出 foo.pgm

1 个赞

我也切换到elvish了,弄了一个oh-my-elvish

主要是兼容性比较好,我现在同时用Linux/macOS/Windows三个系统做开发

想问下你是怎么解决windows下面没有dir或ls命令的?这两个命令似乎是cmd和powershell内置的,elvish也没有类似的内置命令

scoop install main/uutils-coreutils

我不喜欢用dir这一套,我都是用ls这一套的。然后这个是用Rust重新实现的coreutils:

1 个赞

在 Windows 10 的 Windows Terminal 下试了下 elvish, 输入字符时字体会闪,没法用。

我的是Windows 11里面内置的 Windows Terminal,没有这个问题

在Windows上面开始使用 Elvish 之后,我开始使用 Elvish 写一些脚本。除了交互式的Shell,Elvish用作一门跨平台的脚本,也是超好用的。

Elvish已经是我未来做开发生产力的一个好帮手了,因为Bash Scripting写起来特别痛苦。

那就奇怪了。我用的 Terminal 已经是最新版本了。

Release Windows Terminal v1.17.11461.0 · microsoft/terminal · GitHub

Elvish 还缺少一个 autosuggestions 功能,等这个完善了,再切过去用。