本帖最后由 寒潮大冬瓜 于 2026-3-8 16:08 编辑




SSF指定路径内模糊搜索代码使用功能等按文件名代码搜索并运行命令(带对话框)界面伸缩89
好多下载的或者自己拼凑的lsp代码,放在一个文件夹里,通过外置“自动加载文件夹中的lsp-fas-vlx-VLS文件.lsp”代码进行加载。由于功能较多记忆模糊,很难完全记住不常用的功能的命令,于是ssf代码来了→支持模糊搜索,点取后能自动提取文件前命令→开始停止ssf代码→开始运行确定的命令!也就不担心代码太多的问题了,于是代码文件名很长就知道是为什么了→便于检索!
喜欢的更换代码里的文件路径就能用了!
;; ------------------------------------------------------------
  ;; 主程序开始
  ;; ------------------------------------------------------------
  (princ "\nSSF:按文件代码搜索并运行命令(文件夹:C:\\XCAD\\0JIAZAI)")

  ;; 初始化文件列表
  (setq files-list (scan-files "C:\\XCAD\\0JIAZAI"))

2026年03月07日17时37分22秒升级版:SSF升级版支持vlsfasvlx格式文件指定路径内含子文件夹模糊搜索代码使用功能等按文件名代码搜索并运行命令(带对话框)
;;; 功能:扫描"C:\XCAD\0JIAZAI"文件夹下的所有LSP/FAS/VLX/VLS文件,代码实际上不常用的代码可以考虑不需要用“自动加载文件夹中的lsp-fas-vlx-VLS文件.lsp”提前加载,那么就用“自动加载文件夹中的lsp-fas-vlx-VLS文件.lsp”加载子文件夹内的代码文件,用ssf管理需要的时候再加载并运行的代码文件。
与加载代码配合使用相得益彰!
自动加载文件夹中的lsp-fas-vlx-VLS文件(不支持子文件夹内文件加载→配合ssf代码)
https://bbs.mjtd.com/forum.php?mod=viewthread&tid=194653&fromuid=418631
(出处: 明经CAD社区)

使用攻略:用不包含子文件夹的加载lsp+支持子文件夹的ssf→完美实现→cad开启时→只加载常用几个插件→想起要用哪个插件或代码→再用模糊搜索的ssf代码→输入关键词A*关键词B*关键词C→点搜索或刷新→直到对话框面板出现自己心仪的代码→点中→确定→自动加载+运行提取的快捷命令(格式是非中文字符,否者ssf无法帮你提取快捷键命令)→丝滑助力cad绘图!










网友答: 写过一个,给楼主参考


网友答:
寒潮大冬瓜 发表于 2026-3-7 10:41
建议大侠分享给大家

那我就献丑啦
啾...嘣...


  1. (defun c:slsp (/ *error* str key flst fi dm ln fn rf r1 gn e1 catch s)
  2.   (defun *error* (s)
  3.     (princ (strcat "\n错误停留文件: " fn))
  4.     (princ (strcat "\n错误对应行: " (itoa ln)))
  5.     (if (/= s "函数被取消")
  6.       (vl-bt)
  7.     )
  8.     (if rf
  9.       (close rf)
  10.     )
  11.     (princ)
  12.   )
  13.   
  14.   ;; 获取搜索字符串
  15.   (if (and (boundp 'ostr) ostr)
  16.     (princ (strcat "\n要查找的代码段: <" ostr ">"))
  17.     (princ "\n要查找的代码段:")
  18.   )
  19.   (setq str (getstring t))
  20.   
  21.   ;; 获取搜索选项
  22.   (initget "Yes No")
  23.   (setq key (getkword "\n忽略大小写[是(Y)/否(N)] <Y>:"))
  24.   (if (or (null key) (= key "Yes"))
  25.     (setq key "Yes")
  26.   )
  27.   
  28.   ;; 更新或使用上次的搜索字符串
  29.   (if (/= str "")
  30.     (setq ostr str)
  31.     (if (boundp 'ostr)
  32.       (setq str ostr)
  33.       (progn
  34.         (princ "\n必须输入搜索字符串!")
  35.         (exit)
  36.       )
  37.     )
  38.   )
  39.   
  40.   ;; 设置搜索路径
  41.   (setq mp2 (mypath 2))
  42.   (setq mp1 (mypath 1))
  43.   (setq flst
  44.     (apply 'append
  45.       (mapcar '(lambda (a)
  46.                 (mapcar '(lambda (x) (strcat a "\\" x))
  47.                   (vl-directory-files a "*.lsp" 1)
  48.                 )
  49.               )
  50.         (list
  51.           (strcat mp2 "L2F")
  52.           (strcat mp2 "L2F\\加载程序")
  53.           (strcat mp2 "L2F\\机械图框\\MECpg")
  54.           (strcat mp2 "PsAddLsp")
  55.           (strcat mp2 "DxmlPlus")
  56.           (strcat mp1 "cao.y\\加载程序")
  57.           (strcat mp1 "\\MyCAD\\加载程序")
  58.         )
  59.       )
  60.     )
  61.   )
  62.   
  63.   ;; 搜索文件
  64.   (setq fi 0)
  65.   (setq dm t) ; 标记是否找到任何匹配
  66.   (princ "\n以下文件包含代码段:")
  67.   
  68.   (foreach fn flst
  69.     (setq ln 0)
  70.     (setq rf (open fn "r"))
  71.     (setq r1 (read-line rf))
  72.     (setq gn 0) ; 当前文件的匹配计数
  73.    
  74.     (while r1
  75.       (setq ln (1+ ln))
  76.       
  77.       ;; 检查是否匹配
  78.       (setq e1
  79.         (if (= key "Yes")
  80.           (wcmatch (strcase r1) (strcat "*" (strcase str) "*"))
  81.           (wcmatch r1 (strcat "*" str "*"))
  82.         )
  83.       )
  84.       
  85.       (if e1
  86.         (progn
  87.           (setq dm nil) ; 至少找到一个匹配
  88.          
  89.           ;; 第一次匹配时显示文件名
  90.           (if (= gn 0)
  91.             (progn
  92.               (princ (strcat "\n\n文件名: " fn))
  93.               (princ "\n匹配行:")
  94.             )
  95.           )
  96.           (setq gn (1+ gn))
  97.          
  98.           ;; 尝试获取更精确的匹配上下文
  99.           (setq catch (gocatch
  100.                        '(execute
  101.                          r1
  102.                          (strcat ".{0,10}" str ".{0,10}")
  103.                          nil
  104.                          nil
  105.                         )
  106.                       ))
  107.          
  108.           (if (car catch)
  109.             ;; 错误处理
  110.             (progn
  111.               (princ (strcat "\n错误停留文件: " fn))
  112.               (princ (strcat "\n错误对应行: " (itoa ln)))
  113.               (princ "\n读取错误内容: ")
  114.               (princ r1)
  115.               (vl-bt)
  116.             )
  117.             ;; 正常显示匹配
  118.             (progn
  119.               (princ (strcat "\n  行 " (itoa ln) ": "))
  120.               (if (and (cadr catch) (car (cadr catch)))
  121.                 (princ (car (cadr catch)))
  122.                 (princ r1)
  123.               )
  124.             )
  125.           )
  126.         )
  127.       )
  128.       (setq r1 (read-line rf))
  129.     )
  130.     (close rf)
  131.   )
  132.   
  133.   (if dm
  134.     (princ "\n没有找到代码段!")
  135.   )
  136.   (princ)
  137. )

  138. ;;1 我的文档 2 桌面 3其余 当前文件夹
  139. (defun mypath (num / wss spe desktop)
  140.   (setq wss (vlax-create-object "WScript.Shell"))
  141.   (setq spe (vlax-get-property wss "SpecialFolders"))
  142.   (setq Desktop (vlax-invoke-method spe "Item" "Desktop"))
  143.   (cond
  144.     ((= num 1) (strcat (getvar "mydocumentsprefix") "\\"))
  145.     ((= num 2) (strcat Desktop "\\"))
  146.     (t (getvar "DwgPrefix"))
  147.   )
  148. )
  149. ;; 辅助函数保持不变
  150. (defun gocatch (func / s e)
  151.   (setq s (vl-catch-all-error-p
  152.            (vl-catch-all-apply
  153.              '(lambda () (setq e (eval func)))
  154.            )
  155.          )
  156.   )
  157.   (list s e)
  158. )

  159. (defun execute (str ex gm ic / r s lst a)
  160.   (setq r (vlax-create-object "vbscript.regexp"))
  161.   (if gm
  162.     (progn
  163.       (vlax-put-property r 'global -1)
  164.       (vlax-put-property r 'Multiline -1)
  165.     )
  166.   )
  167.   (if ic
  168.     (vlax-put-property r 'ignorecase -1)
  169.   )
  170.   (vlax-put-property r 'pattern ex)
  171.   (setq s (vlax-invoke r 'execute str))
  172.   (vlax-release-object r)
  173.   (vlax-for x s
  174.     (setq a (vlax-get-property x 'value))
  175.     (setq lst (cons a lst))
  176.   )
  177.   (reverse lst)
  178. )




网友答: 我也有个类似的,只是没写对话框

网友答:
菜卷鱼 发表于 2026-3-5 09:26
我也有个类似的,只是没写对话框

有对话框→加上自动提取命令→执行命令→快速一些!

网友答: 看起这个很有用 下载一个

网友答: 本帖最后由 寒潮大冬瓜 于 2026-3-5 10:27 编辑
qifeifei 发表于 2026-3-5 10:20
看起这个很有用 下载一个

我昨晚搞好了之后自己也有点小开心不用担心忘记了快捷命令了,也不用‘everything’来漫天搜索了!感觉还有继续深化的空间→读取lsp里的C:后面的命令及其说明,添加进来→才完美!当然之前的用波总QQ群437857444的面板也是能添加这个搜索栏的→后续完善
另外DCL还是有限制的,无法实现拉伸面板!水平方向也没有实现滚动条功能!

网友答: 果然想像力最重要!

网友答:
guankuiwu 发表于 2026-3-5 15:13
果然想像力最重要!

感谢指导!

网友答:
cjrun 发表于 2026-3-6 00:21
写过一个,给楼主参考

很好→很棒!很好~很棒!!很好……很棒!!!感谢分享!

网友答: 很棒,谢谢楼主的分享!
下载来试试看
  • 上一篇:开图自动替换字体
  • 下一篇:没有了