首页 > 解决方案 > Tcl:容忍命令执行中的换行符

问题描述

这个 tcl 问题有点特别。我有大括号中的文本,其中包含方括号中的命令执行:

proc doit {txt} {
    return $txt
}

set txt {
    
    hallo [doit world]
    
}

puts [subst -novariables -nobackslashes $txt]

输出就是hallo world我想要的。

但是,有时我的编辑器会格式化文本,使得命令执行被分成多行:

set txt {
    
    hallo [doit
    world]
    
}

这会导致错误消息wrong # args: should be "doit txt"

有没有一种优雅的方法来避免这个问题?引入反斜杠行扩展不起作用,因为我的编辑器可能会在重新格式化文本后将其置于错误的位置。而且我想保持换行符不变(否则我可以在使用之前从 txt 中删除所有换行符subst)。解析文本并从命令执行中删除换行符似乎有点复杂。

谢谢你的帮助!

标签: tcl

解决方案


一个技巧是subst用花括号包裹你的脚本文本,并让 Tcl 解析器在使用{*}扩展运算符替换命令之前解开它:

set txt {
    
    hallo [{*}{doit
       
         world}]
    
}

这将对重新格式化非常有效。但是,我宁愿教你的编辑要表现得温和。


推荐阅读