小名开开

在春天的光影里喘息

在 CPU 提升为 N200 后,Surface Go 4 似乎成为了一款不错的 Galgame 设备。当然现在还有另一个选择 Steamdeck,但是 Steamdeck 也有屏幕、风扇、系统兼容性等方面的劣势。尤其是在屏幕方面,差别非常大。总之先列举一下配置作参考。

Surface 系列

名称 配置 重量 厚度 CPU分数
Surface Go 奔腾 G4415Y HD615 8G 128/256G 1800*1200 522g 8.3mm 1591
Surface Go 2 奔腾 G4425Y HD615 8G 128G 1920*1280 544g 8.3mm 1696
Surface Go 2 酷睿 M3 8100Y HD615 8G 128/256G 1920*1280 544g 8.3mm 2878
Surface Go 3 奔腾 G6500Y HD615-23EU@900M 8G 128G 1920*1280 544g 8.3mm 3022
Surface Go 3 酷睿 i3 10100Y HD615-24EU@1G 8G 128/256G 1920*1280 544g 8.3mm 2935
Go 4 Business 酷睿 N200 UHD 8G 64/128/256G UFS 1920*1280 521g 8.3mm 5455

Steamdeck 系列

名称 配置 重量 厚度 屏幕
Steamdeck 7nm Zen2 8CU 16G 64G-1T 669g 49mm 7寸 1280 × 800
Steamdeck OLED 6nm Zen2 8CU 16G 512G-1T 640g 49mm 7.4寸 1280 × 800@90 HDR

对比

两者还是有挺大区别的,前几代 Surface Go 的 CPU 性能基本已经脱离主流了,毕竟被动散热,上架就是同时代低端性能,跑 E-mote/Live2D 都存在一定性能问题。手头的 Surface Go 一代跑 Steam 客户端本身都显得很勉强。4 代的 N200 CPU 性能其实也是本代低端,但毕竟刚上市还过得去。

所以针对 Galgame,Surface 的主要且唯一巨大的优势就是屏幕,无风扇算个小优,系统优势不大,Deck 也可以装 Win 切换。

而 Steamdeck 毕竟是游戏机,能跑的都能跑,只是屏幕差距对 Galgame 来说是个硬伤,性能则显得相对冗余。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
sudo fdisk -l                   # 列举设备或分区
sudo blkid # 查看硬盘 UUID,只列举物理储存设备
sudo fdisk /dev/sda # 互动式硬盘分区

sudo mount /dev/sda ~/HDD # 挂载硬盘
sudo umount /dev/sda # 卸载硬盘

sudo mkfs.ext4 /dev/sda # 格式化整个硬盘
sudo mkfs.ext4 /dev/sda1 # 仅格式化第一个分区
sudo e2label /dev/sda Momoda # 给硬盘命名为 Momoda
sudo e2label /dev/sda # 查看硬盘名字
ls /dev/disk/by-label/momoda # 以硬盘名字指向硬盘,方便硬盘位置变动后正常挂载

sudo chown $USER:$USER ~/HDD # 修改硬盘访问权限

# 挂载 windows 共享文件夹:命令,远端路径(Windows端),本地路径,用户名,密码,编码,文件权限,文件夹权限
sudo mount.cifs //_windows_IP_or_hostname/_sharefolder ~/target_mount_path -o username=your_windows_username,password=your_windows_password,iocharset=utf8,file_mode=0777,dir_mode=0777

sudo apt install smartmontools # smartctl 命令属于 smartmontools 包
sudo smartctl -a /dev/sda # 查看硬盘健康状态
sudo hdparm -I /dev/sda # 查看硬盘健康状态(另一种方式)

dos2unix /path/to/file # 将文件从 windows 格式转换为 unix 格式,可用 * 通配
unix2dos /path/to/file # 将文件从 unix 格式转换为 windows 格式,可用 * 通配
1
2
# 开机自动挂载硬盘
nano /etc/fstab
1
2
# <device>                <mountpoint>        <file system> <options> <dump> <fschk>
/dev/disk/by-label/momoda /home/kaikai/Momoda ext4 defaults 0 0

关于 fstab 的参数说明:https://www.redhat.com/sysadmin/etc-fstab

树莓派 4B 相比于 3B/3B+ 等 3 系有很多改进,但主要的是内存从 1G 加到了顶配版 8G,网卡也从百兆升级到了千兆,使得树莓派 4B 有了作为下载机的实用性。

系统直接使用官方的 Raspberry Pi。BT 软件一开始尝试使用 qBittorrent 的命令行版本 qBittorrent-nox,开启服务用 web UI 进行远程控制。但实际使用后发现在高压力下,qBittorrent-nox 因为内存占用巨大而频繁被杀进程,然后由系统服务重启,再被杀,再重启,最差时每两三分钟就被杀一次。报错日志看得我心惊肉跳。频繁异常重启也导致了文件丢失、下载进度丢失以及网站封禁等情况,其配置中关于内存限制的参数完全无用,搜索后发现官方开发组把很多反馈,包括内存控制、磁盘碎片、重启丢文件等都甩锅给 libtorrent。遂放弃。

对 qBittorrent 的评价又下降了。之前在 windows 下也是因为 qBittorrent 的缺陷(数量巨大的硬盘碎片)而放弃的。

一番周折后,最终改用了 Transmission 作为 BT/PT 服务器端(transmission-daemon),开启 RPC 以允许 Web UI 和第三方客户端连接,Samba 作为局域网文件共享服务器的方案。并自行编写了 RSS 下载脚本以实现 RSS 订阅自动下载。

Transmission

安装与文件目录连接

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 安装
sudo apt update
sudo apt install transmission-daemon

# 获得配置文件的权限
sudo chown -R $USER:$USER /etc/transmission-daemon

# 设置配置文件软链接
sudo mkdir -p /home/$USER/.config/transmission-daemon/
sudo ln -s /etc/transmission-daemon/settings.json /home/$USER/.config/transmission-daemon/
sudo chown -R $USER:$USER /home/$USER/.config/transmission-daemon/

## 挂载 USB 外接硬盘并设置目录权限
sudo mkdir -p /home/$USER/Momoda # Momoda 是硬盘挂载目录
sudo mount /dev/sda1 /home/$USER/Momoda # 挂载硬盘
sudo chown -R $USER:$USER /home/$USER/Momoda # 设置权限
mkdir -p /home/$USER/Momoda/BT # 建立下载目录

修改系统服务设置

1
2
3
4
5
6
7
8
9
10
# 修改启动脚本
sudo nano /etc/init.d/transmission-daemon
>> 在 nano 编辑器中,修改 USER=<YOURUSERNAME> 为你的用户名,<Ctrl+S> 保存 <Ctrl+X> 退出。

# 修改服务配置
sudo nano /etc/systemd/system/multi-user.target.wants/transmission-daemon.service
>> 在 nano 编辑器中,继续修改 User=<YOURUSERNAME> 为你的用户名,<Ctrl+S> 保存 <Ctrl+X> 退出。

# 重新加载服务
sudo systemctl daemon-reload

修改配置文件

Trasmission 会在停止服务时自动保存配置文件,运行服务时修改会被覆盖,必须停机修改。

1
2
3
4
# 停止服务
sudo systemctl stop transmission-daemon
# 编辑配置文件
nano ~/.config/transmission-daemon/settings.json
1
2
3
4
5
6
7
8
9
10
11
12
13
// 部分参数后续可以在 web UI 中再次修改,但当前另一些参数只能在配置文件中修改。
{
"download-dir": "/home/kaikai/Momoda/BT", // 设置下载目录,kaikai 替换为你的用户名
"rpc-whitelist-enabled": true, // 只允许白名单内的 IP 访问
"rpc-whitelist": "192.168.*.*", // 局域网白名单,如果公网要访问则为 *.*.*.*
"rpc-authentication-required": false, // 因为只是家用,不需要密码。若公网访问则设置为 true,之后下两条有效
"rpc-user-name": <username>, // 独立的用于 webUI/RPC 登录的用户名,自己设置,和本文其它用户名无关
"rpc-password": <password>, // 独立的用于 webUI/RPC 登录的密码,transmission 会自动修改内容加密
"umask": 2, // 设置下载文件的权限
"preallocation": 1, // 设置预分配磁盘空间方法,0 No 1 Fast 2 Full
"watch-dir-enabled": true, // 开启监视目录,将种子文件放入监视目录,transmission 会自动开始下载
"watch-dir": "/home/kaikai", // 设置监视目录路径
}

(可选)替换默认的 webui 为 Flood-for-transmission

1
2
3
4
5
6
7
8
# 下载
wget https://github.com/johman10/flood-for-transmission/releases/download/latest/flood-for-transmission.zip
# 解压
unzip flood-for-transmission.zip
# 备份原来的 webui
sudo mv /usr/share/transmission/web /usr/share/transmission/web.bak
# 替换
sudo cp -r flood-for-transmission /usr/share/transmission/web

还有 Transmission-web-controlTransmissionioc 等多个选择。当然默认的也很好。
另外还有独立的客户端比如 Transmission Remote GUI,如果有多个下载服务器的话用客户端更好。

重启 transmission-daemon 服务

1
2
3
4
# 启动服务
sudo systemctl start transmission-daemon
# 查看服务状态
sudo systemctl status transmission-daemon

远程访问

1
2
# 查看树莓派的 IP 地址
ip a

在浏览器中输入 http://<树莓派的ip>:9091 即可访问 webUI,如果设置了 "rpc-authentication-required": true 则会跳出认证输入框。使用 RPC 远程客户端也是类似设置。

RSS 订阅

Transmission 并不支持 RSS 订阅,所以我自己写了个脚本,定期检查指定的 RSS,并通过 RPC 接口发送 torrent-add 消息给 Transmisson。https://github.com/kaikaiiiiiii/rss-feed-down 。特色在于支持 PAC 代理读取 RSS。

1
2
3
4
5
6
7
git clone https://github.com/kaikaiiiiiii/rss-feed-down
cd rss-feed-down
npm install

node ./rss.js
# 在 rss.js 中修改下载目录 savepath = <path>
# 在 rssFeeds.txt 修改订阅源,格式为 <name>,<url>,<useProxy>

通过 crontab 定时执行脚本,实现 RSS 订阅更新并自动下载 torrent 文件。

Samba

安装与配置

1
2
3
sudo apt update
sudo apt install samba samba-common-bin
sudo nano /etc/samba/smb.conf

smb.conf 文件有一堆内容,拉到最下面,修改或添加以下内容:

1
2
3
4
5
6
7
[Pi]                        # 虚拟共享文件夹的名字,后续访问时的路径为 \\<树莓派的ip>\Pi
path = /home/kaikai/Momoda # Pi 虚拟文件夹对应的本地目录
writeable=Yes # 可以写,即可以上传文件,同时也可以删除文件
create mask=0777 # 新建文件的权限
directory mask=0777 # 新建文件夹的权限
public=no # 不是公共文件夹,ananymous 不能访问
# 编辑完成后按 Ctrl+S 保存,Ctrl+X 退出

添加 samba 的授权用户

1
2
# kaikaiHome 为独立的用于 samba 登录的用户名,和本文其它用户名无关
sudo smbpasswd -a kaikaiHome

随后系统会提示输入密码,输入两次并确认

重启 samba 服务

1
sudo systemctl restart smbd

在 Windows 的 <映射网络驱动器> 或其它可以用 smb/cifs 的程序 app 输入 \\<树莓派的ip>\Pi 并输入 kaikaiHome 的用户名和密码即可访问。

同上,这是 Sony Ericsson MW600 索尼爱立信 MW600 蓝牙耳机说明书。下载文件

  1. 关机状态下长按开机键⏼ 不放经过开机阶段继续按住进入配对模式,使用滑动条选择覆盖哪个旧配对。
  2. MW600 连接的通话设备和音乐设备是独立切换的,分别通过长按 ⏯ 或 📞 选择。
  3. 在待机模式下长按 ⏯ 选择设备时,存在第四项 FM 收音机功能。FM 为自带功能不需要蓝牙连接其它设备。
状态 按键 操作 备注
待机模式 长按 ⏯ 长按选择音乐播放配对设备 使用滑动条选择设备列表
待机模式 长按 📞 长按选择通话配对设备 使用滑动条选择设备列表
待机模式 📞 启动手机语音助手 部分电脑设备也有语音助手
待机模式 📞📞 重拨
待机模式 启动当前音乐/视频播放 部分设备会自动启动默认音乐播放器
播放状态 暂停当前音乐/视频播放
来电状态 📞 短按接听,长按拒绝接听
通话状态 📞 短按挂断,长按切换第二通话 另有耳机发声 / 手机发声切换功能
FM 模式 ⏮ ⏭ 长按搜索,短按微调 屏幕显示当前频率
所有状态 ⊂====⊃ 感应滑动条调整音量 设备列表时选择配对设备
配对状态 📞⏼ 同时长按两键 重新设置耳机,清空配对设备

如果您的浏览器不支持 PDF 文件,请下载文件查看。

买了个韶音,发现说明书不好找,就放这里了。下载文件

  1. 关机状态下长按音量⊕不放开机后继续按住进入配对模式。
  2. 配对状态下同时长按耳机键与音量⊕键开启双重配对。
  3. 配对状态下同时长按耳机键与音量⊖键关闭双重配对。
  4. 配对状态下同时长按耳机键、音量⊕键与音量⊖键恢复出厂设置,恢复后需要关机再开。
耳机键(多功能键) 状态 操作
播放/暂停音乐 待机 单击
拨打上一次通话 待机 双击
唤醒语音助手 待机 长按
下一首音乐 音乐播放 双击
上一首音乐 音乐播放 三击
接听电话 来电 单击
拒接电话 来电 长按
挂断电话 通话中 单击
挂断当前电话并切换到第二个通话 通话中 长按
切换系统语言 配对状态 双击

如果您的浏览器不支持 PDF 文件,请下载文件查看。

顺便测试 HTML 插入 PDF 的方法,不需要 hexo-pdf 插件。

1
<embed src="../attach/2023/11/Shokz-OpenMove.pdf" width="100%" height="850px"  type="application/pdf" />

咨询了 chatGPT,还有稍复杂的方式:

1
2
3
<object data="../attach/2023/11/Shokz-OpenMove.pdf" type="application/pdf" width="100%" height="850px">
<p>如果您的浏览器不支持 PDF 文件,请<a href="../attach/2023/11/Shokz-OpenMove.pdf">下载文件</a>查看。</p>
</object>

在 PSN 会员费又一次涨价后,我重新审视了光盘租赁的经济性。在过去不多的几次租光盘经历中,我发现自己其实并没有节约多少钱。于是做了一些主观分析,尝试厘清这个问题。

一,实际支出主要来自于光盘降价和背刺

虽然老猎人等二手盘商家的买卖差价都只有 10-15 元,但实际上,由于每张光盘在手上存留的时间都很长,光盘二手价格的下降才是真正的实际支出。尽管没有明确计算(因为有几张盘目前还在手上承受着掉价损失),但大致估计下来每张盘要损失 100-200 左右。

存留时间长带来的另一个风险是同游戏在各数字渠道的赠送或打折。比如《底特律:化身为人》《战神4》《尼尔:自动人形》《十三机兵防卫圈》等都是在光盘租赁期间,甚至尚未开始游玩时,就在 PSN XGPU 等会免或入库。光盘租赁成了无意义的支出,同时还得承担一笔会免大降价损失,俗称『背刺』。数字游戏的大幅折扣或赠送冲击光盘价格是市场的常态,实质是同一商品的渠道间竞争,但真轮到自己头上了还是很不好受。

二,引出问题:为什么会存留时间较长

闲余时间有限,而可选择的游戏却很多,有限的时间分摊给了不同的游戏。尤其是暴雪全家桶等长消耗类游戏占用了相当一块时间。

和直觉不同的是,虽然游戏总量很多,但每个单机游戏实际分配到的时间不会减少,因为通关时间是相对固定的。代之的是游戏完成周期不断地拉长,甚至可能断断续续持续几年,也使得光盘留存时间不断延长。很多故事剧情驱动的游戏更需要完整的时间段和精神舒适的状态才能游玩,相比于几分钟一局的消耗类游戏,在选择上也不占优势,更加长了通关周期。

另外,XGPU 等订阅服务的兴起、多年积累的 PSN 会免库、Steam 屡次大促积累的游戏库、Epic 坚持不懈的游戏赠送,使得排队列表越来越长,进一步稀释了光盘游戏的时间密度。

光盘租赁的固有缺陷,需要收发快递、换盘费事保管麻烦、资金占用等,虽然也都是劣势,却并不是导致存留时间长的原因,甚至是反向因素。其中唯与存留时长正相关的只有『计划赶不上变化』一项,买的时候计划着要玩,两天以后快递到了,却没时间玩,就变成了无效留存。

三,还有其它因素

  1. 游戏口味的宽泛减弱了对游戏库的二次筛选,增大了平均游戏周期。

  2. 对游戏新作时效性需求不高,不追求第一时间体验。

    新作发售时光盘版与数字版价格一致。如果第一时间购买,那么无论后续掉价几何,全价光盘版可以二手出售就仍比全价数字版有价差优势。但迄今为止追求第一时间玩到的单机游戏并不多。当游戏进入折扣周期后,光盘版价格与数字版价格变得互有高低,这就回到本文开头的情况了——因为存留周期掉价和背刺,我没从租光盘上省下什么钱。

  3. 其它生活因素的时间挤压。

    生活中的所有闲余时间都是相互挤占的,副业加班阅读学习运动健身动漫娱乐等等,都在分摊不多的时间。当生活休闲中加入新要素,游戏时间分配就变得更加捉襟见肘。

四,为什么重新考虑光盘租赁

目前的花费和实际消耗的时间不匹配。

PSN 和 XGP 费用在不断上涨,低价区限制越发严格,数字游戏的成本在变高,Epic 送的游戏越来越水,游戏总时间也在缩减。会员费交了不用,游戏买了不玩,光盘租了不还,都是浪费。在有限的时间下,几个游戏渠道不再是互为补充,而变成了相互冲突的状态。光盘租赁在大作上的相对价格优势重新凸显,比如《只狼》至今数字版最大折扣也就 50%,和光盘租赁的最坏支出差不多。另外如前文所述,如果减除 PSN 和 XGP,游戏库缩小,光盘游戏的存留时间也有可能减缩,以降低光盘租赁的平均成本。

缩减游戏库的纠结在于,停用 PSN 和 XGP 除了失去两个游戏库外,还会失去联网功能,同样会影响到一些游戏的体验。而另一方面,光盘的优势也需要一定的条件。一是其它渠道挤兑要少,因此排除第一方大作。二是通关周期短,因此不能是长消耗类游戏。三是游戏要优质,优先级高,且单价高,口碑好,市场稳定,最好是次新大作。

选择同时意味着放弃。

五,总不能什么都要吧

方案一,彻底数字化,PSNP 二档和 XGPU 二选一或二选二,以帐号共享进一步降低成本。主机选数字版,游戏以库存为主,大作等 50off 或随缘等入库,真有垂涎的就全价购入。

方案二,单平台化。放弃 XGPU,XSX 出售。只开 PSN 二档并出售 Home 位,PS5 购买光驱版。大作用光盘作为补充。

方案三,买块好显卡,放弃主机,保留 PC + SteamDeck。一别两宽,各生欢喜。

方案四,我全都要。


2024-11-27 edit:

目前实践现状是方案二+方案三,PSN 二档已经提供了足够的时间消耗,并没有租赁光盘,买光驱版主要是考虑二手保值问题。

SteamDeck 主要是出门/过年回家使用,同时也是一个现成的 Linux 机,比虚拟机方便且完善。

PC 处理各种杂事,偶尔暴雪全家桶。

前端炒面,后端烤串,

算法磨豆浆,中台煎饼灌。

商拓裹面粉,客服炸鸡块,

运维拉电线,硬件把煤担。

测试擦桌椅,UI洗碗筷。

总监跑堂勤,前台唱花旦。

产品经理沿街站,客官进来看。

文武十八艺,总有你一款。

日语输入法概述

日语常用的有罗马音输入法和假名输入法两种,前者类似于中文的拼音,后者则直接把按键映射为具体的假名。假名键位整体上输入速度会更快,多数情况可以一键一假名,还能减少 aiueo 五个键的磨损,但需要专门去记忆排布位置。罗马音键位则基本沿循了假名的音标注音,键位排布就是英语键盘也不需要重新学习。初步了解一下输入法软件的使用方法就可以上手打字了。

罗马音输入法的整体逻辑为:

  • 键入英文字符 -> 根据码表转假名
  • 根据假名选字 -> 进一步选择平假名、片假名,或展开列表择选汉字。
  • 回车或数字键确认选项 -> 上屏

而假名输入法相当于只是跳过了罗马音输入法的 西文字符->假名 这一步的转换,但后续的 决定平片假 -> 选字 -> 输出上屏 这几步一样。

所以对于初学者,使用系统自带的罗马音输入法就够了。

>
点击展开:罗马音键位、假名键位与 JIS 键盘收起

截图

罗马音键位 - 就是普通的英语键盘键位

截图

假名键位 - 非 JIS 键盘通常不会在键帽上印假名,需要心里默记

另外还有单独的 JIS 键盘布局和对应的键盘。以假名键位为基础,键盘上有单独的「半角/全角」、「片假/平假」、「变换/无变换」(用以选择输出汉字)等功能键。普通英语键盘则需要通过组合键实现这些功能。JIS 键盘在纯日语环境下会方便一些。

截图截图

JIS 键盘与键位表

扩展阅读 - 五花八门的中文输入法 [维基百科]

输入法的安装(Windows 和 MacOS,以及网页版)

手机端有另外的输入法和输入方式,另文再述。

Windows 和 MacOS 下都有系统自带的输入法。同时还有一些站点提供了在线方案,比如 Google Translate 的日语模块自带的输入法(需翻墙),不方便安装时可以考虑。

>
点击展开:安装过程详述收起

在 Windows 下需要在系统中先添加日语语言,再在语言下添加日语输入法。这里输入法的名字也叫「微软输入法」,和中文的同名,实际用的是罗马音输入方式,可以在输入法选项里进一步配置。

在 Windows 的系统设置中,先添加日语语言:

在日语语言选项中,添加日语输入法,顺便按需添加手写包和语音包,以防学习时遇到不会念的字导致无法输入:

在 MacOS 下,在设置内查找 键盘 -> 输入法,然后添加日文 - 罗马字输入法。MacOS 有几项设置比较重要,见文末补充

键盘 - 输入法

添加日文 - 罗马字输入法

如果两者都不想安装,也可以使用网页版的输入法,比如 Google Translate 的日语模块自带的输入法(需翻墙)。Google 翻译本身还能在学习过程中提供很多其它的帮助。

Google Translate

输入法的使用

输入法的使用包括:

  • 输入法的热键,输入状态的切换,以及平台间差异
  • 输入、选择模式与详细的罗马音码表
  • 一些特殊字符的输入方法

输入法热键(Windows)

对于日文输入法而言,存在三种状态分别为平假名、片假名、英文。在英文状态下相当于普通的英文输入法,输入英文字符直接上屏。热键也针对这三种情况有相应的配置。

输入法状态快捷键 功能
Win+Space
左 Alt+Shift
切换输入语言及该语言下的输入法。
Win+Space 会在屏幕上展示列表,而左 Alt+Shift 不会
Alt+`(数字1左边的键) 在假名和英文输入状态间切换,当从英文切回假名状态时,会恢复到上次切换为英文前的假名状态。平假名还是平假名,片假名还是片假名。
Ctrl+CapsLock 切换到平假名输入状态
Alt+CapsLock 切换到片假名输入状态
Shift+CapsLock 切换到全角英文输入状态。这状态下输入的英文字符都是全角的,同时仍然保留了择字功能,通过 Tab 而不是平常的 Space 可以选择列表项。
Win+. 打开 emoji 菜单
上屏菜单快捷键 功能
F6 当前输入内容转为平假名
F7 当前输入内容转为片假名
F8 当前输入内容转为半宽片假名
F9 当前输入内容转为全角英文
F10 当前输入内容转为半角英文
* F6 F7 F10 较为常用
Space(空格) 第一次拍击直接选择选字列表第一项,连续第二次拍击使光标进入选字列表,并逐个选择列表项
方向键 已经展开的选字列表里,定位选择列表项
Tab 如果没有拍空格而直接按 Tab,则光标进入选字列表,并逐个选择列表项。此时 Space 与 Tab 作用完全相同。
如果由 Space 启动的选字,则按 Tab 会使选字菜单横向展开成多列,方便使用方向键选字
Enter(回车) 确认当前光标位置的选字上屏
Ctrl-B 打开浏览器使用搜索引擎搜索当前输入内容(给浏览器引流)

输入法热键(MacOS)

MacOS 的热键与 Windows 有所不同,但基本功能相同。主要区别在于,在 Windows 下,输入法的状态切换是在输入法内部切换的,而在 MacOS 下,平假名 / 片假名直接作为两种输入法条目与 ABC(英文)并列,由系统输入法切换快捷键(通常是 Control+Space)统一切换。在输入法选项中可以设置只激活平假名输入,仍然可以通过 F7、择字等方式输入片假名和中文,不影响。

输入法状态快捷键 功能
Control-Shift-R 在当前光标处输入上一次确认的短句并重新择字
Control-3 直接在当前光标处打开颜文字选字列表
<以下快捷键需要先拖动光标使若干字处于文本选中状态>
Control-1 将选中文本转换为相关字符,通常就是选择假名使其在清浊音之转,也可以使漢字在不同书写形式之间转。例如,选择「汉」然后 Control-1 就会出菜单。类似的还有「假」与「仮」等
Control-2 根据选中文本搜索相似汉字,似乎是基于偏旁相似的,例如「假」与「葭暇瑕」等
Control-Shift-R 将选中文本先反转为读音,然后根据读音重新打开选字列表,用于同音不同字的勘误
上屏菜单快捷键 功能
Control-J / F6 当前输入内容转为平假名
Control-J / F7 当前输入内容转为片假名
Control-L / F9 当前输入内容转为全角英文
Control-; / F10 当前输入内容转为半角英文
Space(空格) MacOS 选字菜单是自动出现的,拍击使标进入选字列表,并逐个选择列表项。列表会自动展开
方向键 已经展开的选字列表里,定位选择列表项
Tab MacOS 选字菜单下方有分类列表,Tab 键切换
Enter(回车) 确认当前光标位置的选字上屏

输入法选字菜单

罗马字输入法的输入方式类似于拼音,键入英文字符,输入法弹出选词框,默认一般为平假名。用户用空格或数字键选择相同发音下的各种不同写法,择字确定后按回车上屏。初学者背完五十音图就不会有障碍。

示例:输入 shinjitsu 后按空格逐项选择想要的词组(含翻页),回车确定。也可用数字键直接择字。由于输入有明确意义,因此输入法第一建议是汉字的「真実」,第二选项才是平假名的「しんじつ」。

日语实际有的发音不止50音,以下是字符输入的全表。其中有部分音的输入码存在多种方式。输出结果是一样的,哪个音码习惯就用哪个。

清浊音表

あ゙ い゙ ゔ え゙ お゙
あア いイ うウ えエ おオ ゔヴ
a i/yi u e o vu
かカ きキ くク けケ こコ がガ ぎギ ぐグ げゲ ごゴ
ka ki ku/qu ke ko ga gi gu ge go
さサ しシ すス せセ そソ ざザ じジ ずズ ぜゼ ぞゾ
sa shi/si su se so za ji/zi zu ze zo
たタ ちチ つツ てテ とト だダ ぢヂ づヅ でデ どド
ta chi/ti tsu/tu te to da di du de do
なナ にニ ぬヌ ねネ のノ
na ni nu ne no
はハ ひヒ ふフ へヘ ほホ ばバ びビ ぶブ べベ ぼボ
ha hi fu/hu he ho ba bi bu be bo
ぱパ ぴピ ぷプ ぺペ ぽポ
pa pi pu pe po
まマ みミ むム めメ もモ
ma mi mu me mo
やヤ ゆユ よヨ
ya yu yo
らラ りリ るル れレ ろロ
ra ri ru re ro
わワ ゐヰ ゑヱ をヲ
wa wyi wye wo kyuukana kyuukana kyuukana kyuukana
んン
nn
  • じジ 与 ぢヂ、ずズ 与 づヅ 的读音是相同的,但在码表上则有区别,前者为 ji/zi zu 后者为 di du 以便于输入时区分。

  • ふフ 读作 fu,但输入法一般 fu 和 hu 都支持。

  • ヴ 是因外来语而补充的新假名,读作 vu,类似于英语里的 [v] 音。例如ヴァイオリン(Violin 小提琴)。在日常应用中,也可以以浊音 ブ 来标记。所以ブァイオリン也是对的。但发音上此处的 ブ 最好仍读作 [v]。

  • 由于 ヴ 本来就是新造词用于外来语表音,而日语中对音译词统一采用片假名表示,因此实际没有 ゔ 应用的场景。在微软输入法里无法通过 F6 或 Ctrl+CapsLock 切换到 ゔ,但可以通过空格下拉菜单实现。图例在 MacOS 下则直接展示 ゔ 并正常切换。

  • ゐヰ 和 ゑヱ 在现代日语中已经不再使用,只存在于古文和歌词中,例如《いるは歌》(伊吕波歌)。但在输入法上仍然保留,为避免与 いえ 重码,两者的音码调整为 wyi 和 wye。

  • 根据 维基百科,江户到明治期间,有过若干种 wu,即 わ行う()的独立假名写法出现在不同的文献中,但未有正式规范。字体文件和输入法也都不支持,既不能正常键入,也不能正常显示。や行い() 和 や行え()也有相同情况。

  • 用「kyuukana(旧仮名)」也可以输入旧时代的假名,比如「ゐ」、「ゑ」、「ゔ」等。这种输入方式属于以意定字,后面会有更多类似的例子。

  • 这三个音节的对应字符目前 在 Unicode 扩展词表中有定义,统归为「変体仮名」,使用定制的字体可以显示。本文采纳 Unicode 的写法,但使用 svg 图片代替显示。

  • 在实际的输入中,由于句子往往是片段或整句输入的,有些假名有两种输入方法(表中蓝字标部分),有些在输入时可以有一定程度的简略。类似于中文拼音里的容错、模糊音、联想功能。

  • 比如 ん,如果需要独立输入,需要按两次 n。但在实际整句输入中,会自动判断是否需要独立输入,经常只需要输入一次 n。比如「山田さんわ日本人です(山田先生是日本人)」这句,实际输入是:

    山田 さん 日本 です
    yamada san wa nihon jin desu

    这里さん(先生)的 ん 就只输入了一个 n,因为在日语中,ん 后面不会跟元音。因此在后续接 wa 时。输入法会自动把 n 转换成 ん。这里的 ん 确实可以输入 nn,但没必要。但若后续跟随的是元音时,为了区分就需要输入两次 n。比如 tanni(たんい,単位),若错输为 tani,就变成了たに(谷)。

常规拗音表

や゙ ゆ゙ よ゙
きゃ きゅ きょ ぎゃ ぎゅ ぎょ
kya kyu kyo gya gyu gyo
しゃ しゅ しょ じゃ じゅ じょ
sya/sha syu/shu syo/sho ja/jya ju/jyu jo/jyo
ちゃ ちゅ ちょ ぢゃ ぢゅ ぢょ
cha/cya/tya chu/cyu/tyu cho/cyo/tyo dya dyu dyo
にゃ にゅ にょ
nya nyu nyo
ひゃ ひゅ ひょ びゃ びゅ びょ
hya hyu hyo bya byu byo
ぴゃ ぴゅ ぴょ
pya pyu pyo
みゃ みゅ みょ
mya myu myo
りゃ りゅ りょ
rya ryu ryo
  • 常规拗音(通常直接称为拗音)只有 ゃゅょ 三列。它们和清浊表中 い 列的各个假名,组成一类转腔调的音。
  • 拗音当然也有片假名写法,表格空间有限,只写了平假名以作示意。
  • 虽然拗音表只有 36 个,但实际上输入法的码表中通常可以输出大量不在上表的可能的发音组合,用于表达各类外来语的发音,这些非常规的组合称为 合拗音
  • 其实,即使是在各种教材中作为标准音表存在的常规拗音,本身也是用于外来词音译发音的,只不过这个外来语是汉语。由于历史原因,常规拗音被视作日语本语言发音的一份,成为五十音图的增表了。

合拗音表

あ゙ い゙ ゔ え゙ お゙
うぁ うぃ うぇ うぉ いぇ
wha whi/wi whe who ye
きゃ きぃ きゅ きぇ きょ ぎゃ ぎぃ ぎゅ ぎぇ ぎょ
kya kyi kyu kye kyo gya gyi gyu gye gyo
くゃ · くぁ くぃ くゅ · くぅ くぇ くょ · くぉ ぐぁ ぐぃ ぐぅ ぐぇ ぐぉ
qya · kwa/qa/qwa qyi/qi/qwi qyu · qwu qye/qe/qwe qyo qo/qwo gwa gwi gwu gwe gwo
しゃ しぃ しゅ しぇ しょ じゃ じぃ じゅ じぇ じょ
sya/sha syi syu/shu sye/she syo/sho jya/zya/ja jyi/zyi jyu/zyu/ju jye/zye/je jyo/zyo/jo
すぁ すぃ すぅ すぇ すぉ
swa swi swu swe swo
ちゃ ちぃ ちゅ ちぇ ちょ ぢゃ ぢぃ ぢゅ ぢぇ ぢょ
cha/cya/tya cyi/tyi chu/cyu/tyu cye/che cho/cyo/tyo dya dyi dyu dye dyo
つぁ つぃ つぇ つぉ
tsa tsi tsu tse tso
てゃ てぃ てゅ てぇ てょ でゃ でぃ でゅ でぇ でょ
tha thi thu the tho dha dhi dhu dhe dho
とぁ とぃ とぅ とぇ とぉ どぁ どぃ どぅ どぇ どぉ
twa twi twu twe two dwa dwi dwu dwe dwo
にゃ にぃ にゅ にぇ にょ
nya nyi nyu nye nyo
ひゃ ひぃ ひゅ ひぇ ひょ びゃ びぃ びゅ びぇ びょ
hya hyi hyu hye hyo bya byi byu bye byo
ぴゃ ぴぃ ぴゅ ぴぇ ぴょ
pya pyi pyu pye pyo
ふゃ · ふぁ ふぃ ふゅ · ふぅ ふぇ ふょ · ふぉ
fya · fwa/fa fyi/fwi/fi fyu · fwu fye/fwe/fe fyo · fwo/fo
みゃ みぃ みゅ みぇ みょ
mya myi myu mye myo
りゃ りぃ りゅ りぇ りょ
rya ryi ryu rye ryo
りゃ りぃ りゅ りぇ りょ
rya ryi ryu rye ryo
ヴゃ · ヴぁ ヴぃ ヴゅ ヴぇ ヴょ · ヴぉ
vya · va vyi/vi vyu vye/ve vyo · vo
  • 合拗音表里标注蓝色的单元格写了两个拗音,因为码表里同时存在形如 くゃ 和 くぁ 两种拗音码,考虑到表格空间写在一起。两者是不同的码,不同的输出结果。
  • 同样,合拗音有片假名形式,表格写不下。或者说因为表外来语,合拗音主要是用片假名形式。
  • ヴ 行在 Windows 和 MacOS 下有不同表现。Windows 下默认输出形式为片假名 ヴ 搭配平假名拗尾,而 MacOS 下则直接输出片假名拗尾。另外 MacOS 下没有 vyi 和 vye 这两个码,只有 vi 和 ve。
  • 长拗音,例如「きょう(今日)」,是个发音的概念,但在输入法上正常写作 kyou,即常规拗音 きょ 接普通平假名 う 即可。这个词在罗马音注音上可能会写作 kyō,ō 即是拼音的第一声的符号。

特殊输入

日语里还有一些特殊的假名或符号,有些常用有些罕用,但整体都是被输入法支持的。这些特殊规则需要固定记忆:

小写假名及输入

输入小写假名需要使用 x 或 l 为前缀后正常输入音码,两个都可以,分别用左右手无名指击键,习惯哪个用哪个。小写假名大部分出现在拗音、外来语发音、特殊停顿等场景。

a i u e o
ぁァ ぃィ ぅゥ ぇェ ぉォ
la/xa li/xi lu/xu le/xe lo/xo
ゕヵ ゖヶ
lka/xka lke/xke
っッ
ltsu/ltu/xtsu/xtu
ゃャ ゅュ ょョ
lya/xya lyu/xyu lyo/xyo
ゎヮ
lwa/xwa
  • 可以看到,所有的拗音、合拗音中的第二个小写假名都可以简单地直接输入,所以拗音码表主要也是为了输入简化、更易配合发音习惯,并不需要特别记忆。
  • ゕゖ 与 ゔ 类似,可以通过空格下拉选项输入,但无法通过快捷键切换得到。这三者都是因为其片假名形式用于外来语,而额外添加的对应平假名。
  • ヵ一般只在量词中出现,「一ヵ月」。ヶ 也是,「三ヶ国」。这两个基本是同义的,源头其实就是中文的「箇(个)」。
  • ゎ 用于古拗音,比如 くゎんおん(观音)。按码表规律 くゎ 和 ぐゎ 两个拗音本应写作 kwa 和 gwa,但这两音码已经被 くぁ 和 ぐぁ 占了位置,所以只能输入 kuxwa。
  • っッ 在每个课程中都会讲到,表句中停顿,不详述。

特殊假名及输入

>>『 っッ 』
  • 表发音短促停顿的符号,除了 ltsu/ltu/xtsu/xtu 等以「小写つ」的形式输入外,还可以通过 复写下一个假名的首字母 的方式来输入。比如がっき(学期)→gakki,にっぽん(日本)→nippon。
  • 所以除了 nn 得ん以外,连写任意两个辅音字母都会出来「っ」,甚至「xxa」也能得到「っぁ」。这属于っ的单独输入逻辑。
>>『 ー 』
  • 在日语输入法中,直接按「-」键得到的就是「ー」。这个符号在日语中表示长音,主要用于片假名外来词,比如ケ一キ(蛋糕),偶尔也用在平假名中,比如おーいしい(美味しい)。
  • 相对的,若要输入英语半角减号「-」,需要按「-」然后空格下拉择字,或者快捷键切换到英文输入状态再按「-」。
>>『 ゠ 』
  • 「゠」名叫「二分二重双罫」,与等号相似但为独立字符。
  • 本意上表示外国人名、地区名转为假名时,两个单词间的隔断。比如ホー゠チ゠ミン(胡志明)。可以同时用于平片假名。
  • 这个符号实际上已经被抛弃,只在个别文章中还可以看见。现在一般用「・」来表示。大概是゠太容易和 =(等号)混淆了。
  • 输入法无法直接输入「゠」,甚至用 =(等号)空格择字都没有该字符。需要通过 Unicode 码表输入(&#x30A0;)。
  • 「゠」设计上还有一个「・」没有的作用,即对标英语的单词断行连接符「-」,用于外来词在行尾写不完转行时的标记。在英语中,当一个单词过长需要截断时,会在合适的音节处加「-」(减号)后回车换行,例如:
    Today is a big day, you got your first light-
    saber. Now you must go to Jedi Temple immedi-
    ately get your Jedi Knight certificate. May 
    the Force be with you.
    但在日文写作中「゠」的实际作用可有可无。和中文类似,日文换行也只需要直接另起即可,不需要专门标注单词连接。因而逐渐被彻底抛弃甚至不纳入输入法。
  • 考据来源:https://ja.wiktionary.org/wiki/%E3%82%A0

我觉得这就是黑船来航后全面西化时用力过猛的遗留。

>>『 ・ 』
  • 在日文输入法状态下直接按「/」(与问号同键)即可输入。
  • 和 ゠ 一样,表示外国人名、地区名转为片假名时,两个单词间的隔断。目前仍是常用符号。
>>『 ゛ ゜』以及>>『组合用 ゙ ゚』
  • 「 ゛」读作 dakuten(濁点),「 ゜」读作 handakuten(半濁点),分别表示清音、浊音假名的变化标记。输入也是这个拼写,在空格下拉列表中择字。
  • 这两个是独立的符号,不是附加在假名上的。正常输入浊音最好还是用浊音的音码。濁点主要用于特殊场合,比如本文说明部分,或者拼凑「い゛」之类时用到。
  • 因为是独立符号,所以在特殊场景下要考虑换行问题。比如「い゛」,如果在行尾,那么换行时濁点容易被带到下一行。
  • 「 ゙ ゚」 是组合用浊点和半浊点符号。无法直接输入,只能通过复制粘贴或用 Unicode 码表输入 <&#x3099; > 和 <&#x309A;>。普通「 ゛゜」的 Unicode 码则是 <&#x309B;> 和 <&#x309C;>。两者码位不同,是不同的字符。
  • 「组合用」的意思是,利用了 Unicode 的偏移量特性,这两个符号会自动往左靠到前一个字符上。比如「い゙い゚」。或者用下划线演示一下:「_゙ _゚ 」。
  • 组合用 ゙ ゚输入麻烦,但好处较多。在很多操作中,い゙ 会完全地被当作一个字符,移动光标、选择复制或调整格式时都很方便。如果是「い゛」,在行尾换行时濁点容易被带到下一行。而 い゙ 则不会。
  • 在删除时,如果按 delete 删除光标右方的字,那么整个 い゙ 会被删除。如果按 BackSpace 删除光标左方的字,那么只会删除 ゙,い 不会被删除。
  • 在统计字数时,い゙ 会被当作两个字符。但在移动光标时会当作一个字符。在程序化编辑或 RPA 控制时需要单独处理。
  • Office 软件中插入符号功能可以比较方便地输入组合用 ゙ ゚。
>>『 々 ゝゞヽヾ 〃 〱〲〳〴〵 』
  • 々表示连续两个相同汉字的第二个汉字的简写,比如「人々,ひとびと(人们)」,「先々月,せんせんげつ(上上月)」。
  • 在普通输入时,输入可以表示为两个相同汉字的音节时,输入法会将々自动作为候选词之一。
  • 当要单独输入时,输入 onaji(おなじ,同じ),意为「相同的」,然后在候选词中择字。思路类似于中文输入中的以词定字,或者说以意寻字。
  • 々 有一个 Windows 和 MacOS 都不支持,但 Google Translate 支持的输入是「noma」下拉择字。思路是ノマ两字拼起来像是々。可谓以形寻字。
  • 基于「以意寻字」的逻辑,若输入 dou(どう,同)也可以择得这些字符,只是杂项会更多一些。Windows 还额外可以用 kurikaeshi(くりかえし,繰り返し)择得这些字符。
  • MacOS 可择字符比 Windows 少一些。
  • 当输入 おなじ 开始选词时,你会发现一连串的类似符号。
    • ゝゞ 分别表示清音、浊音平假名的重复,ヽヾ 表示清、浊片假名的重复
    • 〃 称为 ノノ字点(ののじてん) ,代表「与上方或前方对应位置的内容重复」。比如:
      站点 类型
      京东 购物网站
      淘宝
      拼多多
      4399 游戏网站
    • 〱〲 这两个就厉害了。它俩不是 くぐ,而是「竖排文本时表示前面两到四个假名的重复」,分别表示清音或浊音。并且在竖排文本书写印刷时,要占据两格长。
    • 〳〴〵这三个就更厉害了。因为上面两个符号要占据两格长,而通常来说哪怕是 Word 这种专业排版软件都很难让一个字符拉长占两个位置,所以发明了这三个字符,以便在竖写时可以拼成〱〲 。上半部分分清浊有两个,下半部分就只有一个。我试着在 Word 里拼了一下,在特定字体下的效果还不错。
  • 考据来源:https://en.wiktionary.org/wiki/%E3%80%B1

果然是黑船来航后用力过猛了。

>>『 ゟ 』
  • 读作 yori,输入也是 yori 后择字。用于在书面中表示书信的发件人,类似于中文里的「谨缄」「呈」,或路途的起点,类似于「始」「发」。这类字称为「合略仮名」
  • 日语中因为存在汉字训读,所以一个字符读两个音并不奇怪。这个字在明治以前经常使用,现在也还在看板招牌等处偶尔出现。
  • 中文曾有段时间也出现过合字的现象,最知名的是「瓩」,读作 Qīanwǎ,意思就是千瓦,电力功率单位,因为被收入字典而一度引发关注。多音节汉字大部分产生自外来语计量单位翻译,有兞兣兙兡兛兝嗧等若干字。
  • 但也有如「圕」这样,由文化名人自行创造的多音节汉字。「圕」最初被图书馆学家杜定友用于代替笔画繁多书写不便的繁体「圖書館」三字,一开始直接念作 túshūguǎn,即图书馆,后渐渐演化为 tuān,回归为单音节字。但在简化字方案中,「書」简化为「书」,「圕」则成为历史并未被简化字方案收录。理论上对应简化后的「」则作为一个扩展字符收入 Unicode - U+31578; 点位。
  • 合略假名 中还列举了其它一些合略字,有不少暂时还没有被 Unicode 收录。
>>『 ヿ 』
  • koto。MacOS 自带日文输入法无此字,Windows 可以择得。
  • 字典的解释直接就是「事」の略体。ヿ 相关的短语包括ことにする、ことになっている等常用短语。但这个字本身很少用到,只有在书面语中才会出现。
  • 被定义为片假名,还有对应平假名形式的,但尚未在 Unicode 中收录,也无法输入。
>>『 〆 乄 』
  • shime。两者是同一个字,历史原因两者在字库中有独立的位置。MacOS 只能输入前者,而 Windows 两者都可以择得。Windows 下还可以用 shite 输入两个字符。
  • 主要用法是用密封的信封向对方寄送信件等时,以及强调信封已「封闭」牢固时。此外,它有时也有「收紧」、「扼杀」和「占领」的意思。
  • 组词包括「〆切(締切)」、「昆布〆(昆布締め)」、「尺〆(尺貫法の木材の体積の単位)」,「林方立木尺〆法(江户法律)」等。
>>『 〼 』
  • masu。各输入法都可以正常输入。
  • 这个字可厉害了,浪费了我一个小时。我一直以为它是某个字符不能正常显示时,替代出现的那种方框。但实际上它是一个独立的字符,并且还是个象形字。甚至在简体中文里我都从未见过如此象形的字。
  • 来,欣赏一下:枡
  • 释意一:是「枡」的替代字。用于表示「盛」、「量」、「桶」等容量单位,比如「一〼の酒」、「一〼の米」。「枡」就是上图这样的容器。
  • 释意二:ます 的简写,語尾「〜あり〼」,单纯用其发音。
  • 释意三:「益々(ますます)」的替代字,比如「〼〼のご発展を」。其实也是 ます 的替代简写。

符号与其输入方式

>>『 ← ↑ → ↓ 』
  • 用于表示方向,这个是符号,但和假名一样有专门的输入码。←(zh) ↑(zj) →(zk) ↓(zl)。
  • 熟悉 Vim 的知道这是 Vim 移动光标的键位。再往前考据则会涉及到 VI 的一段轶事
  • 一图胜千言:VimArrowKey
>>『 ○×△□ 』
  • 从这里开始就是符号了,输入法均使用以意定字的方式。列个列表方便看,表太长了放下面。
  • 除下表外,有个「kigou(記号)」可谓终极大法,可以选择输入法码表内的几乎所有符号。逐个翻阅吧。selection
  • 顔文字与絵文字是不同的,它俩的出现有先后,发展有联系。但单纯从字符角度来说,前者是用符号拼出来的,后者则是单独的字符。
  • 不同输入法支持的码、具体可选的符号数量有较大区别,下表在 MacOS 有很多不能输入。该表也不是全覆盖。
  • 有些码意义不大,比如「ando=&」不如 Shift+7 方便。但有些还是有用的,比如「kiroguramu=㎏」。要从符号堆里择出 ㎏ 很麻烦,直接输入哪怕多打几个字都可以。
  • 输入符号再按空格,也可以选择同类下形似的其它符号。比如输入「>」再按空格可以 择得「≫」。
  • 可以看到这些符号有些音类似于中文,有些音类似于西文。对照一下中文,像电力单位瓦、中文也是音译。但对于「公斤」,中文采用意译,而日文则直接音译。
意義 Romaji 記号例 意義 Romaji 記号例
矢印 yajirushi ⏩→▷⇨👉⇄ 数字 suuji 0️⃣1️⃣2️⃣3️⃣
ue ↑ ̄㊤↜↗↖⇑⇈↻↺☝ 上矢 ueya ↑↗⇡⇧⇑⇈➚
shita ↓_㊦↷↘⇂☟↧➷ 下矢 shitaya ↓↯↶⇩↡
hidari ㊧←↙↫⇠⇤↰⇦☚↩⇚⇇↸↜☜↚ 左矢 hidariya ←↢⇙⇦↖
migi ㊨→⇒↛↱☞➳➔➴☛➢➠➪➫➤➥➲➺⇏➟➼ 右矢 migiya →⇒↗↝↛➭➬⇛➤➜➧
jou ge
ten ゜゛;:.,、´.・`¨…‥∵・:;゙゚∴ 括弧 kakko 「」「」()【】“”
三角 sankaku ▾△▲▽▼∵∴◁ 四角 shikaku ■□◆◇▪▫▨▩❑❖▣◩
演算 keisan ≧÷±-×+=≠<≦> 近似 kinji
恒等 goudou ≡≅≢ 不等号 futougou ≠≧⋝≳⋧≱≥≯≹
plus minus purasumainasu ±∓ root ru-to √∜∛
乘号 kakeru ×⋇⊠⊗ waru ÷⊘⋇∤
Percent pa-sento % Permillage pa-miru
何故ならば nazenaraba 故に yueni
斜線 shasen /\ 垂直 suichoku
kaku ∠⊥∟⊾∢∡ 直角 choltsukaku
Integral integuraru ∫∬∰∱∳∭⌠⌡ Phi fulai φΦ∮
無限大 mugendai 丸数字 marusuuji ①②③⑳❶❷❸
括号数字 kakkosuuji ⑴⑵⑶⒇ 罗马数字 ro-masuuji ⅠⅡⅢⅫ
図形 zukei ★○▼▽▲△■□◆◇◎●☆ 単位 tanni °′″℃¥$€¢£%Å㍗‰㎜㍳℧℥℔ℓ㎯₪₦㏒
kome ヴィ bui
hoshi ☆✨💫🌟 星座 seiza ♈️♉️♊️♋️
天気 tenki 🌞🌤☁️☔️✨ kao 😃😂😇😍
osu mesu
音楽 ongaku 🎵🎼🎷🪕 音符 onpu ♪♬♫♩
Flat furatto AND ando ∩&∧⋀⋏
株式会社 kabushikikaisha ㈱㊑会社㍿ 有限会社 yuugengaisha (有)㈲㊒
代表 daihyou (代)㈹ 土/度 do ℃°℉㊏㈯
maru ●○◎◉⚫︎⚪️⭕️💮 バツ batsu ×❌❎✖️
二重丸 nijuumaru hishi ◆◇❖
黒星 kuroboshi 黒丸 kuromaru
白星 shiroboshi 白丸 shiromaru
te 👉✊🙏👌 郵便 yuubin 〒📮🏧📦
チェス chesu ♟️ トランプ toranpu ♤♡♧♢🃏
電話 denwa ℡✆☏☎ Number nanba- №#
en cent sento ㌣¢¢
Pond pondo £ Dollar doru $$
摂氏 seltsushi JIS jisu
centi senchi ㎝㌢ 千米 kirome-toru
平米 heibei 立方Meter rippoumi-teru
千克 kiro/kiroguramu Litre rittoru llℓ
milli miri ㎜㍉ milligram miriguramu
昭和 shouwa 平成 heisei
大正 taishou 明治 meiji
Section sekushon § chuu ㊥㊟
左上 hidariue ┏┌╒╓┎╭╔┍ 左下 hidarishita ┗└╘╙┖╰╚┕
右上 migiue ┐┓╕╖┒╮╗┑ 右下 migishita ┘┛╛╜┚╯╝┙
tate │┃|¦∥╵║¦❚┆❙ yoko ━─┈╌┄┉╍═
太枠 futowaku ┗┻━┛┏┳━┓ 細枠 hosowaku └┴─┘┌┬─┐
满中 mannnaka ┼╂╋┿╃╁╳╬╪╫ 罫線 keisen <上全部及更多>
ase (・・;)(^_^;) itai (>_<)
居眠 inemuri (-_-)zzz 御茶 ocha ( ^^) _U~~ ( ^^) _旦~~
Wink ulinku (^_-)-☆ 嗯—— u-n (゜-゜) (゜.゜) (゜レ゜)
奥特曼 urutoraman (o|o) えっへん ehhen <(`^´)>
跪拜/抱歉 ojigi/gomen _(._.)_ <(_ _)> 徹夜 tetsuya (=_=)
闪亮 kirakira ☆ミ ☆彡 ごぼごぼ gobogobo .。o○ ○o。.
じと jito (-.-) (-_-) (ー_ー)!! じろ jiro ( 一一) (;一_一)
一服/烟 ippuku/tabako (-。-)y-゜゜゜
(^。^)y-.。o○
あわ awa .。o○ ○o。.
動物 doubutsu (=^・^=) <*))>=< C:。ミ neko (=^・^=) =^_^=
哈依 ha-i (^O^)/ 何故/謎 naze/nazo (?_?) (・・?
吃驚 bikkuri ( ゚Д゚) 无语 muka (-"-)(ーー゛)(-_-メ)
顔文字 kaomoji <以上全部及更多> 絵文字 emoji 😱😓
>>『 ā ī ū ē ō 』
  • 这是用于在罗马音注音中表示长音的符号。比如「おかあさん okāsan 妈妈」,「おにいさん onīsan 哥哥」,「じゅうにがつ jyūniketsu 十二月」,「おねえさん onēsan 姐姐」,「おとうさん otōsan 爸爸」。
  • 尽管如此,日文输入法却无法输入这五个字符,没有对应的码表,也没有以意寻字的方法。在きごう下择字也同样找不到这几个。
  • 对于中文用户,输入这几个字符最方便的办法是直接切换到中文输入法,然后调出软键盘等符号功能,然后在拼音符号中择字输入。
  • 其次的方法是在 Word 等软件中,使用插入符号功能,找到对应字符输入。或在相关功能的网页上复制粘贴。
  • 如果要经常使用,可以在输入法的用户自定义词典里添加,并分配对应的输入码。
  • 一般不需要担心输入问题,通常会使用 ā=aa ī=ii ū=uu ē=ee ō=ou 代替。随着发音变迁,ē 有时也会写作 ei。[参考]

默认情况下,vmware 虚拟机的硬盘空间可以在 vmware 的虚拟机设置里调整大小,但只能『扩展』,却无法缩小。

截图
当输入较小数字时,按钮变灰,无法点击。

问题:为什么要缩小虚拟机硬盘

一,vmware 的虚拟硬盘文件 *.vmdk 默认是动态分配空间的,没有数据的虚拟 “硬盘空间” 并不占用真实主机的实际硬盘空间。当虚拟机内需要储存更多数据时,对应的 vmdk 文件会相应增大,以便容纳新增的数据。但当虚拟机内的数据被清理时,已经增大的 vmdk 文件却不会自动缩小。随着虚拟机的不断使用,『只增大不缩小』的情况会逐渐严重,直到 vmdk 体积达到预设的虚拟机硬盘完整容量为止。
临时文件、虚拟机快照、积累性的文件复制与删除操作等各种情况都会增大 vmdk 体积。vmware 针对这种情况提供了 shrink disk(压缩硬盘)功能,也就是在虚拟机数据已经被清除后,整体扫描一遍 vmdk 文件,清理无效数据,缩小真实体积。但这也有两个麻烦:

  1. 因为膨胀永远存在,所以压缩也要经常进行,难免感觉在做无用功。
  2. Linux 下 shrink 功能有 bug,需要配合 dd 命令先以 0 数据充,相当于先撑大再缩小,耗时数倍。参考:第四条豆知识

二,很多情况下,我们安装虚拟机的用途都比较单一,虚拟机的实际硬盘占用也往往小于 vmware 的推荐值。这是实际需求方面及可操作方面。

三,强迫症 / 好奇 / 无理由。

于是,根据实际使用情况,适当降低虚拟机的硬盘容量,将『使用膨胀』的上限卡住,释放真实硬盘空间并避免经常的压缩操作,对时间和金钱都有好处。尤其是现在 SSD 逐步标配的阶段,虚拟机硬盘容量设置不当造成的浪费是很可观的。

问题:如何操作

我以一个当初决策不当分配了 40GB 硬盘空间的虚拟机 Windows XP 为例,重新调整的目标为 10GB。一般来说,全新安装的 Windows XP 大约占 4-5GB 空间,则我们还有约 5GB 空间可用来安装测试软件等,足够了。如果不够就自行酌情决定调整目标。

一、清理删除当前虚拟机下的所有快照,如果这些快照很重要不能删,那接下来的操作对你就没意义了。

二、确认虚拟机硬盘是拆分成多个文件的动态分配硬盘。本例子中,该虚拟机的所有文件放在 D:\Program files\Windows XP.vmwarevm 目录下。用 VSCode 打开虚拟机目录下和虚拟机同名的 *.vmdk 文件,如 『Windows XP.vmdk』。找到 # Extent description 部分,检查描述部分,一看就懂了。如图:

打开 vmdk 时几种可能的情况:

  • 如果有多行描述,并且每行写了 SPARSE ,这就是我们需要的类型,拆分+动态分配磁盘。直接跳过后续转格式步骤,进入修改分区步骤即可。
  • 如果有多行描述,但每行写的是 FLAT ,则为拆分的预分配磁盘,需要转格式。
  • 只有一行描述,写的是 FLAT ,则是单一文件预分配磁盘,也需要转格式。
  • 如果乱码或者提示打不开,则是单一文件动态分配磁盘,还是需要转格式。

VMWare 在新建虚拟机时会默认选择第一种类型,但玩家当初可能出于性能等考虑,选择了其它类型的虚拟硬盘。那么就需要使用 vmware 自带的一个命令行工具

1
vmware-vdiskmanager.exe

转换成第一种类型。该工具在 vmware 安装目录下,默认为 “C:\Program Files (x86)\VMware\VMware Workstation\vmware-vdiskmanager.exe”。

转换方法:

该工具的命令行写法为:

工具名 参数1 源文件 参数2 参数3 目标名称
vmware-vdiskmanager -r(转格式) Windows XP.vmdk(例) -t(目的) 1(目的磁盘类型,1 为拆分+动态分配) newdisk.vmdk

该命令中, -r-t 1 两部分不需要变化,目标名称 随意,之后会改名覆盖源文件。源文件名 根据实际情况变化,而 工具名 通常要带上路径。

所以完整的命令大约是如下样子:

1
"c:\Program Files (x86)\VMware\VMware Workstation\vmware-vdiskmanager.exe" -r "d:\Program Files\Windows XP.vmwarevm\Windows XP.vmdk" -t 1 "d:\Program Files\Windows XP.vmwarevm\newdisk.vmdk"

回车以后开始执行转换:

转换完成以后,删除旧的 “windows XP.vmdk” 和多个关联文件 “windows XP-s0xx.vmdk”,然后把新的 newdisk.vmdk 重命名成 “windows XP.vmdk” 以替换。其它 newdisk-s00x.vmdk 不用变。

三,打开虚拟机,进入系统。

  • 在虚机机内,使用分区管理软件将硬盘分区缩小,并将空闲保留在右端,分区块保持在左端。我们的整体目标是从 40GB 缩到 10GB,则现在要多缩一点给后续操作留出余量。如图,暂时缩到 9GB。
  • Windows 7 以上系统,自带的磁盘管理就有『压缩卷』功能可以调整分区大小,WinXP 用的是 DiskGenius 免费版本。Win98 则需要寻找更古老的相应软件。
  • 中途可能需要重启虚拟机,无妨,调整完关闭虚拟机即可。

四,加减乘除:

再次打开 Windows XP.vmdk 文件,定位到 # Extent description 部分。这次重点放在第二部分数字内容上,经计算,该数字为每个分块文件对应虚拟硬盘的簇数量,每簇 512 Byte,2 簇 = 1KB。我们的目标容量为 10GB,也就是:

  • 10(GB)*1024(MB/GB)*1024(KB/MB)= 10485760 KB = 20971520 簇。

检查 # Extent description,前两个文件每个 8323072,则把第三行的数字改为

  • 20971520 – 8323072*2 = 4325376


并删掉后续各行及对应文件,我们就在 vmware 部分完成了虚拟机硬盘大小调整。

五,补足余量:

重开虚拟机。前次调整分区时,预留了 1GB 左右的余量。再次打开分区工具,把剩余未使用空间重新分配给各分区。

因为对计算机分区而言,由于存在分区表、启动扇区等原因,物理上的 10GB 硬盘空间在系统内表现是略小于 10GB 的,『内』『外』之间有差额,这对于虚拟机也一样成立。如果一开始就分区 10GB 而外部调整也等 10GB 的话,再次启动虚拟机就会报分区表错误,界时修改起来反而麻烦。现在这样按先预留余量,而后补足分区操作就没问题了。

六,清理死数据:

由于直接修改了描述文件,改小了簇数量,-s003.vmdk 里原本存于 4325376 之后的数据变成了永久的『死数据』。关闭虚拟机后,需要使用 vmware-vdistmanager -r -t 1 再作一次转换。虽说是转换,但目的却是清理死数据。清理完以后直接单独替换新旧 -s003.vmdk 即可。(想想为什么?)

————————————————-

相关细节:

  • 虚拟机为 Linux 系统时原理一样。利用 GParted 等分区工具,首先缩小使用分区,并调整未分区块到尾端。关机编辑 vmdk 描述,开虚拟机调整补分区足余量,再用 vmware 提供的工具清理死数据即可。
  • 预分配类型的虚拟硬盘必须先 vdiskmanager 转类型,不能直接操作。追求性能的话在编辑完再转回去。不过追求性能的话应该上 SSD,一力降十会。
  • 编辑 .vmx 和 .vmdk 文件不要用 windows 自带的记事本。
  • 虚拟机备份直接复制整个目录即可。
  • 扩容不需要按本文操作,使用 vmware 自带功能即可。

脚本文件里的 Hybrid Script(混合式脚本)

上文曾介绍了混合式脚本的原理和示例,这里补充一个实际适用的场景。

问题描述:

在 Windows 下,即使正确关联了 .ps1 的打开方式,Powershell 也无法正常运行脚本,只有一闪而过的报错信息。

正确设置了 PowerShell 的关联

使用录屏软件捕获到这一闪而过的错误信息

而首先打开 PowerShell 终端,并在终端里指定执行脚本,则可以正确执行:

脚本本身没有问题

错误原因:

这个错误原因其实挺显然的——在 Windows 下双击执行,等同于运行 PowerShell.exe,并向其传入了脚本文件的完整地址作为参数。但 Windows Explorer 在传递 %1 时没有加引号,PowerShell.exe 也没有对此做检查。结果就是,只要脚本所在的目录含有空格,PowerShell.exe 就会把空格前半段视为文件地址,而把空格后半段视为另一个运行参数。

而通过先启动终端再指定脚本运行正常,就是因为没有传参这个过程,Powershell 自行请求了脚本文件,就能正常执行。

解决办法

解决办法却不容易。修改双击打开时的参数设置为其加上引号,这个太困难了。修改 PowerShell 程序本身,为其添加参数检查更是不可能,只能坐等微软更新。

剩下的只有两种办法,一是永远把 .ps1 脚本放在没有空格的目录里。不但本目录不能有空格,上级目录一直到盘符所在的根目录都不能有空格。这其实也挺麻烦的。

另一种办法就是用混合式脚本:

  • 代码示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<# : test.ps1.bat
@ECHO OFF
powershell -noprofile "iex (${%~f0} | out-string)"
goto :EOF
:: 以上是 bat 代码,用以正确向 PowerShell 传递带空格路径 / 以下是 PowerShell 代码,示例用的 echo #>

echo ""
echo ================================
echo "You can run PS1 correctly here."
echo "But can't run it by double click."
echo ================================
echo ""

cmd /c pause | out-null

虽然我们要写的是 PowerShell 脚本,但为了让脚本能支持在含空格的路径下双击执行,我们不得不首先以批处理文件的形式调用 CMD,然后让 CMD 向 PowerShell 正确地传递带上引号的完整路径。这样,PowerShell 就能正确识别脚本文件的位置,执行混合脚本里的 PowerShell 代码段,完成最初预期的功能。

  1. 双击运行效果:
    混合脚本显示的是 CMD 的黑窗口

因为混合脚本首先运行的是 CMD,所以窗口变成了黑色。但 PowerShell 的脚本确实正确执行了。

题外话:

  1. 通常这种混合脚本我都会按语言命名为 ***.ps1.bat 以区别普通的 .bat,并提醒用户(也就是我自己)这需要 Windows 安装了 Powershell 才能正确执行。PowerShell 可以从 Windows 的系统组件里添加,Win10 则已经自带了。
  2. 为了截图方便,上文的示例代码最后一行其实又用到了 CMD 代码的 pause,所以这个示例代码严格来说是 CMD → Powershell → CMD 的三阶混合脚本。
0%