Preferowaną metodą wskazywania lokalizacji w dokumencie wymagającym uwagi są trzy gwiazdki: ***
. Kiedy przychodzi czas, aby wybrać region zawierający trzy gwiazdki za pomocą shift+right-word
lub shift+left-word
, te funkcje pomijają trzy gwiazdki i przechodzą do następnego słowa. Kiedy zajrzałem do środka bindings.el
, zobaczyłem, że left-word
i right-word
są adaptacjami forward-word
i backward-word
, które można śledzić w stosunku do wbudowanych funkcji w kodzie źródłowym C. Zasadniczo szukam left-word
i right-word
, która zawiera symbole, takie jak trzy gwiazdki ***
.Alternatywa słowa przekierowanego do przodu/do tyłu w celu uwzględnienia symboli - np. ***
Czy ktoś może zaproponować sposób, aby przeskoczyć słowo lub symbole po lewej stronie, a słowo lub symbole po prawej stronie. Funkcja musiałaby zachowywać się podobnie do lewego i prawego słowa, aby móc wybrać więcej niż jedno słowo, jeśli klawisze strzałek są naciskane więcej niż jeden raz - np. left-word-or-symbols
i right-word-or-symbols
.
Poniżej znajduje się funkcja zwyczaj oparciu pomocny odpowiedzi poniżej:
(defvar lawlist-movement-syntax-table
(let ((st (make-syntax-table)))
;; ` default = punctuation
;; ' default = punctuation
;; , default = punctuation
;; ; default = punctuation
(modify-syntax-entry ?{ "." st) ;; { = punctuation
(modify-syntax-entry ?} "." st) ;; } = punctuation
(modify-syntax-entry ?\" "." st) ;; " = punctuation
(modify-syntax-entry ?\\ "_" st) ;; \ = symbol
(modify-syntax-entry ?\$ "_" st) ;; $ = symbol
(modify-syntax-entry ?\% "_" st) ;; % = symbol
st)
"Syntax table used while executing custom movement functions.")
(defun lawlist-forward-entity()
"http://stackoverflow.com/q/18675201/2112489"
(interactive "^")
(with-syntax-table lawlist-movement-syntax-table
(cond
((eolp)
(forward-char))
((and
(save-excursion (< 0 (skip-chars-forward " \t")))
(not (region-active-p)))
(skip-chars-forward " \t"))
((and
(save-excursion (< 0 (skip-chars-forward " \t")))
(region-active-p))
(skip-chars-forward " \t")
(cond
((save-excursion (< 0 (skip-syntax-forward "w")))
(skip-syntax-forward "w"))
((save-excursion (< 0 (skip-syntax-forward ".")))
(skip-syntax-forward "."))
((save-excursion (< 0 (skip-syntax-forward "_()")))
(skip-syntax-forward "_()"))))
((save-excursion (< 0 (skip-syntax-forward "w")))
(skip-syntax-forward "w")
(if (and
(not (region-active-p))
(save-excursion (< 0 (skip-chars-forward " \t"))))
(skip-chars-forward " \t")))
((save-excursion (< 0 (skip-syntax-forward ".")))
(skip-syntax-forward ".")
(if (and
(not (region-active-p))
(save-excursion (< 0 (skip-chars-forward " \t"))))
(skip-chars-forward " \t")))
((save-excursion (< 0 (skip-syntax-forward "_()")))
(skip-syntax-forward "_()")
(if (and
(not (region-active-p))
(save-excursion (< 0 (skip-chars-forward " \t"))))
(skip-chars-forward " \t"))))))
(defun lawlist-backward-entity()
"http://stackoverflow.com/q/18675201/2112489"
(interactive "^")
(with-syntax-table lawlist-movement-syntax-table
(cond
((bolp)
(backward-char))
((save-excursion (> 0 (skip-chars-backward " \t")) (bolp))
(skip-chars-backward " \t"))
((save-excursion (> 0 (skip-chars-backward " \t")) (> 0 (skip-syntax-backward "w")))
(skip-chars-backward " \t")
(skip-syntax-backward "w"))
((save-excursion (> 0 (skip-syntax-backward "w")))
(skip-syntax-backward "w"))
((save-excursion (> 0 (skip-syntax-backward ".")))
(skip-syntax-backward "."))
((save-excursion (> 0 (skip-chars-backward " \t")) (> 0 (skip-syntax-backward ".")))
(skip-chars-backward " \t")
(skip-syntax-backward "."))
((save-excursion (> 0 (skip-syntax-backward "_()")))
(skip-syntax-backward "_()"))
((save-excursion (> 0 (skip-chars-backward " \t")) (> 0 (skip-syntax-backward "_()")))
(skip-chars-backward " \t")
(skip-syntax-backward "_()")))))
dlaczego nie używać 'C-s' i' C-r', aby znaleźć gwiazdki i usunąć je w ten sposób? –
@omouse Odkąd kilka miesięcy temu zapoznałem się z Emacsem, szukałem kilku podstawowych funkcji edycyjnych, które przyzwyczaiłem przez lata - "prawe słowo"/"lewe słowo" 'były dobrym początkiem, ale nie do końca. 'forward-symbol' i jego przeciwieństwo były znacznie bliższe, ale nie do końca. Ostatnia niestandardowa wersja 'listą-forward-entity' /' listą-back-back-entity' - prawie spełnia moje osobiste preferencje dotyczące przesuwania kursora. Zasadniczo lubię traktować symbole i interpunkcję oddzielnie od słów i pomijać odstępy. – lawlist