lf filemanager 配置对比 B
10. extract-to 命令#
按键绑定: ah (当前目录), ax (/tmp/), aX (自定义路径)
写法对比:
- lumesh: 使用正则匹配和内置文件函数
1if (Regex.match '\.([gb7xs]z|t[gbx]z|zip|zst|bz2|lz4|lzma|tar|rar|br)$' $f) {
2 let base_name = Fs.base_name(True,$f).first()
3 let npath = Fs.join($dest,$base_name)
4 $lf_user_wheel ouch -q decompress --dir $npath $f
5}- bash: 使用case语句和字符串处理
1case "$f" in
2*.[gb7xs]z|*.t[gbx]z|*.zip|*.tar|*.bz2|*.lzma|*.lz4|*.zst|*.rar)
3 $lf_user_wheel ouch d -qd $1 $f && \
4 fn=$(basename "$f" | cut -d. -f1) && \
5 lf -remote "send $id :cd $1; select $fn && tag ^"
6 ;;
7esac优势说明:
- lumesh: 正则表达式更灵活,内置路径操作函数类型安全
- bash: case语句性能更好,模式匹配简洁直观
11. compress-to 命令#
按键绑定: ac (/tmp/压缩)
写法对比:
- lumesh: 使用字符串方法和条件表达式
1if $dest.ends_with('/'){
2 let base_name = Fs.base_name($sources.first())
3 let dest_file = Fs.join($dest, $base_name)
4}else{
5 let base_name = Fs.base_name($dest)
6 let dest_file = $dest
7}- bash: 使用test命令和字符串操作
1if test "$(echo $1 | grep '/$')" -o -d "$1" ; then
2 name="$(basename -a $fx | head -n1)"
3 dir=$(dirname $1$name)
4else
5 name=$(basename "$1")
6 dir=$(dirname $1)
7fi优势说明:
- lumesh: 字符串方法更直观,条件表达式简洁
- bash: test命令标准化,dirname/basename工具成熟
12. diff系列命令#
按键绑定: df (diff), dt (delta), dm (md5对比)
写法对比:
- lumesh: 使用数组索引和三元运算符
1let files = $fs.lines()
2if len($files)>1 {
3 let lines = $lf_user_wheel md5sum $files[0] $files[1] | .lines()
4 let s1 = $lines[0] | .words() | .at(0)
5 let s2 = $lines[1] | .words() | .at(0)
6 print $s1==$s2 ? 'Same' : 'Differ'
7}- bash: 使用位置参数和条件判断
1set -- $fs
2if [ "$#" -gt 1 ]; then
3 sum1=$(md5sum $1 |cut -d' ' -f1)
4 sum2=$(md5sum $2 |cut -d' ' -f1)
5 if [ "$sum1" = "$sum2" ]; then
6 echo 'Same'
7 else
8 echo 'Differ'
9 fi
10fi优势说明:
- lumesh: 数组操作直观,链式调用简洁,三元运算符优雅, 条件语句更直观简洁
- bash: 位置参数灵活,cut命令高效,条件判断清晰
13. check-sum 命令#
按键绑定: dc
写法对比:
- lumesh: 使用模式匹配
1let ext_name = Fs.base_name(True, $fx).last()
2match $ext_name {
3 sha512 => sha512sum -c $fx
4 sha256 => sha256sum -c $fx
5 sha1 => sha1sum -c $fx
6 md5 => md5sum -c $fx
7 _ => shasum $fx
8}- bash: 使用case语句
1case "$fx" in
2*.sha256) sha256sum -c "$fx" ;;
3*.sha512) sha512sum -c "$fx" ;;
4*.sha1) sha1sum -c "$fx" ;;
5*.md5) md5sum -c "$fx" ;;
6*) sha256sum "$fx" ;;
7esac优势说明:
- lumesh: 模式匹配功能强大,文件扩展名提取类型安全。也支持正则和通配符模式。
- bash: case语句性能优秀,通配符匹配简单直接
14. cmus-play 命令#
按键绑定: Om
写法对比:
- lumesh: 使用条件表达式和错误处理
1pgrep -x cmus ?: foot cmus
2cmus-remote -c -q $fx
3cmus-remote -p -q- bash: 使用条件判断和逻辑运算符
1if [ -z "$(pgrep -x cmus)" ]; then
2 foot cmus && cmus-remote -c -q "$fx" && cmus-remote -p
3else
4 cmus-remote -c -q "$fx"
5 cmus-remote -p
6fi优势说明:
- lumesh: 错误处理运算符
?:简洁,代码更紧凑 - bash: 条件逻辑清晰,逻辑运算符
&&链式调用标准
15. umount-dev 命令#
按键绑定: mu
写法对比:
- lumesh: 使用结构化数据和可选链
1let sel = lsblk -rno 'name,type,size,mountpoint,label,fstype' | Into.table([name,'type',size,mountpoint,label,fstype]) \
2| where(mountpoint != None)
3| Ui.pick() ?.
4if sel {
5 if $PWD ~: $sel.mountpoint {
6 lf -remote `send $id cd /tmp`
7 }
8 $lf_user_wheel umount $sel.mountpoint
9}- bash: 使用awk和字符串处理
1x=$(mount | awk '$1 ~ /^\/dev/ && $3 !~/^\/(home|boot|var)?$/ {sub(/^\/dev\//, "", $1); print $1,$5,$3}' | fzf --prompt='choose to UMount: ' --preview='' | awk '{print $3}')
2if [ -n "$x" ]; then
3 [ -n $(echo $PWD | grep "^$x/") ] && dir=$(dirname $x) && lf -remote "send $id cd $dir"
4 $lf_user_wheel umount "$x"
5fi优势说明:
- lumesh: 结构化数据处理强大,
?.优雅忽略未选择错误,字段访问类型安全 - bash: awk正则处理灵活,管道组合高效,字符串匹配成熟
16. on-cd 命令#
按键绑定: 无(自动触发)
写法对比:
- lumesh: 使用系统函数
1Sys.print_tty `\033]0;lf $PWD\007`- bash: 使用printf重定向
1printf "\033]0;lf $PWD\007" > /dev/tty优势说明:
- lumesh: 系统函数封装更安全,API更清晰
- bash: 直接操作设备文件,控制更精确
17. drag系列命令#
按键绑定: di (拖入), do (拖出)
写法对比:
- lumesh: 使用内置文件函数
1dest=dragon-drop --target -x -p
2cp $dest .
3let base_name = Fs.base_name($dest)
4lf -remote `send $id :select ${base_name}; tag =`- bash: 使用basename命令
1dest=$(dragon-drop --target -x -p)
2cp $dest .
3lf -remote "send $id :select $(basename "$dest"); tag ="优势说明:
- lumesh: 内置文件函数类型安全,变量作用域清晰
- bash: basename命令标准化,命令替换直接
完整对比总结#
语法特性对比#
| 特性 | Lumesh | Bash |
|---|---|---|
| 条件表达式 | condition ? true_val : false_val | [ condition ] && true_cmd || false_cmd |
| 模式匹配 | match expr { pattern => action } | case expr in pattern) action ;; |
| 数组操作 | .lines(), .map(), .filter() | awk, cut, sed |
| 错误处理 | cmd ?: default | cmd || default |
| 字符串方法 | .split(), .join(), .ends_with() | cut, grep, test |
| 文件操作 | Fs.base_name(), Fs.join() | basename, dirname |
继续阅读: