0

我正在使用 emacs 在 Verilog/SystemVerilog 中进行编码,注释行以//.

我喜欢使用“ido find files at point”,所以我'(ido-use-filename-at-point (quote guess))custom-set-variables.

它工作得很好,除非我试图打开另一个文件,而我的光标位于评论的第一个单词上,比如//Revision Control:. //它试图在路径中找到一个名为 Revision 的文件。

如何禁用根///路径的 ido ffap 功能?提供该功能的另一种方法是,如果 ido ffap 在以 . 开头的行上自动禁用//

4

1 回答 1

0

假设verilog-modeffap-alist下面的代码中还没有特殊的 ffap-handlers 应该可以解决问题:

(defun ffap-verilog (name)
  (let ((inhibit-changing-match-data t) ;; string-match should not change match data
    (ppss (syntax-ppss)))
    (if (and (eq (syntax-ppss-context ppss) 'comment) ;; we are inside a comment
         (= (line-number-at-pos (nth 8 ppss)) (line-number-at-pos (point))) ;; limit the match to the line starting the comment
         (string-match "/[/*]\\([[:alnum:]_.]\\)+$"
               (buffer-substring-no-properties (nth 8 ppss) (point))))
    ""
      name)))


(add-to-list 'ffap-alist '(verilog-mode . ffap-verilog) 'append)

特殊情况检查注释的前导///*直接后跟一个字符串,该字符串可能被错误解释ffap为 url 或带有通配符的路径。但是请注意,注释中以开头开头的其他字符串\\不会被处理,因为这些字符串实际上可能是 url。

于 2013-11-10T11:41:22.450 回答