用 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('⊖')
" Euler 常数
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: