Как я могу заставить функцию автозаполнения в emacs соответствовать длинным переменным perl?

#perl #emacs #autocomplete

#perl #emacs #автозаполнение

Вопрос:

Лучшее, что может сделать автозаполнение, — это сопоставить символы word. Например: автозаполнение будет соответствовать только $longvariablename в ранее используемой переменной, $ longvariablename[$i]{‘key’}. Я хотел бы настроить автозаполнение или любой другой файл emacs el для соответствия всей переменной.

В качестве последнего средства мне придется выучить lisp #shudder #.

Заранее спасибо.

Комментарии:

1. Не на 100% ясно, что вы хотите… вы хотите, чтобы это завершилось полностью, вплоть до закрытия} ?

Ответ №1:

Вы можете настроить расширение hippie.

Например, следующая настройка расширяет все строки до пробела или точки с запятой.

 (defun try-expand-perl-extended-var (old)
  (let ((old-fun (symbol-function 'he-dabbrev-search)))
    (fset 'he-dabbrev-search (symbol-function 'perl-extended-var-search))
    (unwind-protect
        (try-expand-dabbrev old)
      (fset 'he-dabbrev-search old-fun))))


(defun perl-extended-var-search (pattern amp;optional reverse limit)
  (let ((result ())
    (regpat (concat (regexp-quote pattern) "[^ ;] ")))
    (while (and (not result)
        (if reverse
             (re-search-backward regpat limit t)
             (re-search-forward regpat limit t)))
      (setq result (buffer-substring-no-properties (save-excursion
                                                     (goto-char (match-beginning 0))
                                                     (skip-syntax-backward "w_")
                                                     (point))
                           (match-end 0)))
      (if (he-string-member result he-tried-table t)
      (setq result nil)))     ; ignore if bad prefix or already in table
    result))
  

Не забудьте включить свою пользовательскую функцию в make-hippie-expand-function список

 (global-set-key [(meta f5)] (make-hippie-expand-function
                               '(try-expand-perl-extended-var
                                 try-expand-dabbrev-visible
                                 try-expand-dabbrev
                                 try-expand-dabbrev-all-buffers) t))