“Zsh”的版本间的差异

来自wrc's Wiki
跳到导航 跳到搜索
第56行: 第56行:
 
(( $path[(I)/bin] )) && echo '/bin is in $path'
 
(( $path[(I)/bin] )) && echo '/bin is in $path'
 
</syntaxhighlight>
 
</syntaxhighlight>
 +
 +
== 参数 ==
 +
 +
一些特殊的 zsh 变量,用于控制 zsh 的行为。另见 [https://man.archlinux.org/man/extra/zsh/zshparam.1.en <code>man zshparam</code>]。
 +
 +
; <code>WORDCHARS</code>
 +
:  被视为 word 组成部分的字符,类似于 Vim 中的 <code>iskeyword</code>
 +
:  我的配置:<code>WORDCHARS="-"</code>
 +
; <code>ZLE_SPACE_SUFFIX_CHARS</code>
 +
:  在补全后可能会有后缀字符(如补全目录后的 <code>/</code>,补全一个参数后的空格),在后缀字符后输入此变量中字符时,后缀字符换成空格
 +
:  我的配置:<code>ZLE_SPACE_SUFFIX_CHARS='&|'</code>
 +
:  如:在 <code>ls dir</code> 补全后变成 <code>ls dir/</code>,再输入一个 <code>|</code> 时命令行变成 <code>ls dir |</code>
  
 
== 外部链接 ==
 
== 外部链接 ==

2021年4月29日 (四) 08:18的版本

变量

Zsh 变量无需加引号。如需要按照空格分割,使用 $=variable 或者 ${=variable}

判断变量是否存在:$+variable,为 1 即存在。判断 associative array 是否有某一个键:$+hash[key]。特别地,判断一个命令是否存在

(( $+commands[nvim] )) && echo 'nvim exists'

变量展开选项

形如 ${(FLAG)variable}。参考 [1]。也可打出 ${( 然后按 TAB 查看补全信息。

常用选项

F
用换行符连接数组元素
j:string:
string 连接数组元素。如果 string 中包含 :,可将两个 : 换成其它字符,只要两字符相同。
s:string:
string 分割变量内容
q
将特殊符号用反斜线 escape
q-
将特殊符号用单引号包裹
Q
去掉一层反斜线 escape
k
一个关系数组(associative array)的所有键(key)
kv
一个关系数组的键和值

例子

${(j: :)${(q-)@}}
将 shell 参数数组变为 escape 后的一个参数

数组

Zsh 数组下标从 1 开始。

在数组最前加入一个元素(prepend)

array=($ele $array)

在数组最后加入一个元素(append)

array=($array $ele)
# 或者
array+=($ele)

数组下标选项

形如 $array[(FLAG)sub]。参考 [2]。也可打出 $a[( 然后按 TAB 查看补全信息。

I
返回 sub 在数组 $array 中的最后一次出现的下标,不存在则返回 0
i
同上,不过返回的是第一次出现的下标

判断数组 $path 中是否含有 /bin

(( $path[(I)/bin] )) && echo '/bin is in $path'

参数

一些特殊的 zsh 变量,用于控制 zsh 的行为。另见 man zshparam

WORDCHARS
被视为 word 组成部分的字符,类似于 Vim 中的 iskeyword
我的配置:WORDCHARS="-"
ZLE_SPACE_SUFFIX_CHARS
在补全后可能会有后缀字符(如补全目录后的 /,补全一个参数后的空格),在后缀字符后输入此变量中字符时,后缀字符换成空格
我的配置:ZLE_SPACE_SUFFIX_CHARS='&|'
如:在 ls dir 补全后变成 ls dir/,再输入一个 | 时命令行变成 ls dir |

外部链接

参考资料