如何在Neomutt宏中使用当前邮件ID等变量?
在Neomutt中实现带邮件ID参数的宏及自定义变量使用
1. 获取当前撰写邮件的Message ID并传入宏
在Neomutt的compose模式下,当前正在撰写邮件的Message ID可通过%<{message-id}>格式提取邮件头的Message-ID字段值。注意:这个字段需要在你首次保存草稿或发送邮件后才会生成,未保存草稿时执行宏可能获取不到有效值,建议先保存草稿再操作。
修改后的宏示例(自动清理Message ID中的<>特殊字符,避免目录命名问题):
macro compose <F12> "<shell-escape>mkdir -p ~/tmp/neomutt/$(echo '%<{message-id}>' | tr -d '<>')/<enter>"
如果是要获取回复邮件的原始邮件ID,直接用Neomutt内置的%i变量即可。
2. 在宏中使用自定义变量
方式一:shell内联定义实时变量
直接在shell命令里定义临时变量,比如获取实时时间戳:
macro compose <F12> "<shell-escape>NOW=$(date +%Y%m%d%H%M%S); TARGET_DIR=~/tmp/neomutt/$(echo '%<{message-id}>' | tr -d '<>')/$NOW; mkdir -p $TARGET_DIR/<enter>\ <copy-file>$TARGET_DIR/message.txt<enter>\ <shell-escape>pandoc -o $TARGET_DIR/message.html $TARGET_DIR/message.txt<enter>"
这里通过定义NOW和TARGET_DIR两个变量,简化重复路径的写法,同时保证时间戳是宏执行时的实时值。
方式二:使用Neomutt自定义全局变量
先在neomuttrc中定义变量,再在宏中调用:
# 启动Neomutt时生成变量值 set my_timestamp = "$(date +%s)" # 宏中调用变量 macro compose <F12> "<shell-escape>mkdir -p ~/tmp/neomutt/$(echo '%<{message-id}>' | tr -d '<>')/$my_timestamp/<enter>"
这种方式的变量值是Neomutt启动时生成的,不是宏执行的实时值,适合不需要实时更新的场景。
注意事项
- 嵌套shell命令时,必须用
$(command)形式执行子命令,确保变量解析正确。 - Message ID中的
@、<>等特殊字符可能干扰目录创建,建议用tr或sed做清理,比如tr -d '<>@'。 - 多命令宏需用反斜杠
\换行,保证Neomutt能识别完整的宏定义。
内容的提问来源于stack exchange,提问作者Moonlanders
相关产品推荐
相关产品推荐

