用 Unicode 符号定义新操作符可显著提升 Raku 程序的可读性。参见:
https://perl6advent.wordpress.com/2012/12/18/day-18-formulas-resistance-is-futile/
虽然 Raku 为部分常见操作符提供了 ASCII 版本 (见
https://docs.raku.org/language/unicode_ascii),但直接使用完整的 Unicode 操作符
范围通常更为理想。操作系统可能自带输入方法,但建议优先使用 Vim 的内建功能。
Vim 中,输入这些符号的便捷方式是使用二合字母 (:help digraphs-use )。很多常用
符号已有定义。键入 :digraphs 可查看完整列表。一个方便的方法是保存二合字母列
表到文件。可在外壳上运行:
vim +'redir >/tmp/vim-digraphs-listing.txt' +digraphs +'redir END' +q
以下为部分常用的 Vim 二合字母:
<< « /0 ∅ !< ≮
>> » Ob ∘ !> ≯
., … 00 ∞ (C ⊂
(U ∩ -: ÷ )C ⊃
)U ∪ (_ ⊆ >= ≥
?= ≅ )_ ⊇ =< ≤
(- ∈ ?= ≅ != ≠
-) ∋ ?- ≃
希腊字母可通过 '*' 加对应拉丁符号输入:
*p π
*t τ
*X ×
上下标数字可通过 's' 和 'S' 输入:
0s ₀ 0S ⁰
1s ₁ 1S ¹
2s ₂ 9S ⁹
有些符号没有缺省定义。可在 ~/.vimrc 文件里加入新二合字母的定义。
exec 'digraph \\ ' .. char2nr('∖')
exec 'digraph \< ' .. char2nr('≼')
exec 'digraph \> ' .. char2nr('≽')
exec 'digraph (L ' .. char2nr('⊈')
exec 'digraph )L ' .. char2nr('⊉')
exec 'digraph (/ ' .. char2nr('⊄')
exec 'digraph )/ ' .. char2nr('⊅')
exec 'digraph )/ ' .. char2nr('⊅')
exec 'digraph U+ ' .. char2nr('⊎')
exec 'digraph 0- ' .. char2nr('⊖')
" 欧拉常数
exec 'digraph ne ' .. char2nr('𝑒')
" Raku 的原子操作标记
exec 'digraph @@ ' .. char2nr('⚛')
另一种方案是在插入模式下使用缩写,把 ASCII 操作符自动替换为对应的 Unicode 等价
单字符符号。
iabbrev <buffer> !(<) ⊄
iabbrev <buffer> !(<=) ⊈
iabbrev <buffer> !(>) ⊅
iabbrev <buffer> !(>=) ⊉
iabbrev <buffer> !(cont) ∌
iabbrev <buffer> !(elem) ∉
iabbrev <buffer> != ≠
iabbrev <buffer> (&) ∩
iabbrev <buffer> (+) ⊎
iabbrev <buffer> (-) ∖
iabbrev <buffer> (.) ⊍
iabbrev <buffer> (<) ⊂
iabbrev <buffer> (<+) ≼
iabbrev <buffer> (<=) ⊆
iabbrev <buffer> (>) ⊃
iabbrev <buffer> (>+) ≽
iabbrev <buffer> (>=) ⊇
iabbrev <buffer> (\|) ∪
iabbrev <buffer> (^) ⊖
iabbrev <buffer> (atomic) ⚛
iabbrev <buffer> (cont) ∋
iabbrev <buffer> (elem) ∈
iabbrev <buffer> * ×
iabbrev <buffer> **0 ⁰
iabbrev <buffer> **1 ¹
iabbrev <buffer> **2 ²
iabbrev <buffer> **3 ³
iabbrev <buffer> **4 ⁴
iabbrev <buffer> **5 ⁵
iabbrev <buffer> **6 ⁶
iabbrev <buffer> **7 ⁷
iabbrev <buffer> **8 ⁸
iabbrev <buffer> **9 ⁹
iabbrev <buffer> ... …
iabbrev <buffer> / ÷
iabbrev <buffer> << «
iabbrev <buffer> <<[=]<< «=«
iabbrev <buffer> <<[=]>> «=»
iabbrev <buffer> <= ≤
iabbrev <buffer> =~= ≅
iabbrev <buffer> >= ≥
iabbrev <buffer> >> »
iabbrev <buffer> >>[=]<< »=«
iabbrev <buffer> >>[=]>> »=»
iabbrev <buffer> Inf ∞
iabbrev <buffer> atomic-add-fetch ⚛+=
iabbrev <buffer> atomic-assign ⚛=
iabbrev <buffer> atomic-fetch ⚛
iabbrev <buffer> atomic-dec-fetch --⚛
iabbrev <buffer> atomic-fetch-dec ⚛--
iabbrev <buffer> atomic-fetch-inc ⚛++
iabbrev <buffer> atomic-inc-fetch ++⚛
iabbrev <buffer> atomic-sub-fetch ⚛−=
iabbrev <buffer> e 𝑒
iabbrev <buffer> o ∘
iabbrev <buffer> pi π
iabbrev <buffer> set() ∅
iabbrev <buffer> tau τ
vim:tw=78:ts=8:noet:ft=help:norl: