2013-03-13 3 views
2

В Emacs есть ли способ управления, где курсор/точка попадает в расширение аббревиатуры?Как управлять размещением курсора в расширении аббревиатуры Emacs?

Вы знаете, что-то вроде этого?

("orgfootnote" "[fn:: %?]" nil 0) 
+0

Это Emacs так, конечно, можно что-то сделать! Не могли бы вы подробнее рассказать о том, где теперь находится курсор, и где вы хотите, чтобы это закончилось? Кроме того, дважды проверьте и убедитесь, что знаете, какой режим аббревиатуры вы используете, поскольку для Emacs есть пара из них. –

ответ

3

Abbrev не предлагает эту функцию самостоятельно, но они предлагают достаточно крючков, чтобы сделать это извне. .

(define-skeleton my-orgfootnote "Docstring." nil 
    "fn::" _ "]") 

, а затем использовать сокращения как

("orgfootnote" "" my-orgfootnote) 
+0

Отлично! В случае, если кто-то заинтересован в его использовании для фактического синтаксиса сноски, я слегка отрегулировал интервал: '(define-skeleton my-orgfootnote" Docstring. "Nil " [fn :: "_"] \ n \ n ")' – incandescentman

0

Если вы имеете в виду встроенную функцию аббревиатуры, то вот моя проблема. С помощью этого deafdvice, если у вас есть аббревиатура, содержащая строку @@, то после exapnsion курсор будет помещен в эту позицию в расширенном тексте, где встречается @@.

(defadvice expand-abbrev (after my-expand-abbrev activate) 
    ;; if there was an expansion 
    (if ad-return-value 
     ;; start idle timer to ensure insertion of abbrev activator 
     ;; character (e.g. space) is finished 
     (run-with-idle-timer 0 nil 
          (lambda() 
           ;; if there is the string "@@" in the 
           ;; expansion then move cursor there and 
           ;; delete the string 
           (let ((cursor "@@")) 
           (if (search-backward cursor last-abbrev-location t) 
            (delete-char (length cursor)))))))) 
1

Если вам необходимо заполнить шаблон, то abbrev неправильный объект. Я очень рекомендую yasnippet. abbrev очень полезен для исправления частых опечаток.

Смежные вопросы