Следующая функция elisp возьмет ссылку вокруг текущей точки, как она распознана org-bracket-link-regexp
, либо [[Link][Description]]
либо [[Link]]
, либо , и заменит ее на Description
в первом или Link
во втором случае.
(defun afs/org-replace-link-by-link-description ()
"Replace an org link by its description or if empty its address"
(interactive)
(if (org-in-regexp org-bracket-link-regexp 1)
(let ((remove (list (match-beginning 0) (match-end 0)))
(description (if (match-end 3)
(org-match-string-no-properties 3)
(org-match-string-no-properties 1))))
(apply 'delete-region remove)
(insert description))))
[[LINK]]
формата org ссылки тоже. Я узналmatch-beginning
иmatch-end
из вашего ответа.Я пытался добавить это к ответу @Andrew, но это было слишком долго для комментария ...
Мне очень понравилось его решение, за исключением того, что оно переместило курсор. (Технически, я думаю, это сместило точку. Во всяком случае ...) К счастью, было легко добавить,
save-excursion
чтобы избежать этого:источник
Вызывайте эту команду, когда точка находится где-нибудь после первых
[[
скобок org-ссылки (или в любом месте на / после гиперссылки org-link).Ссылка на организацию будет удалена, если она имеет формат
[[LINK][DESCRIPTION]]
или находится[[LINK]]
вorg-mode
буфере; иначе ничего не случится.В целях безопасности отбрасываемая ССЫЛКА от org-link сохраняется
kill-ring
в том случае, если возникает необходимость использовать эту ссылку в другом месте.источник
Самым быстрым может быть размещение курсора перед ссылкой, затем тип
C-M-space
(mark-sexp
), который пометит всю ссылку. Затем удалите его, набрав Backspace (если вы используетеdelete-selection-mode
) илиC-w
.источник
Существует решение, которое не использует пользовательский анализ с регулярными выражениями и напрямую использует встроенный
org-element
API:источник
Этот очень быстрый и очень грязный макрос будет одним из способов, а не лучшим:
источник