/ / Začatie výberu ako náhrady za Emacs 'dopredné slovo - emacs, elisp

Začatie výberu ako náhrady za Emacs 'forward-word - emacs, elisp

Chcem nahradiť Emacs "predvolené dopredné slovo aspätné slovo, ktoré funguje viac ako Visual Studio, ktoré považujem za lepšie prispôsobené programovaniu programu Perl, najskôr som sa pokúsil hackovať syntaxovú tabuľku bez toho, aby som dosiahol účinok, ktorý som chcel.

(defconst perl-movement-stop-chars "a-zA-Z$@%_0-9"")
(defconst perl-movement-stop-pattern (concat "[" perl-movement-stop-chars "]"))
(defconst non-perl-movement-stop-pattern (concat "[^" perl-movement-stop-chars "]"))

(defun perl-forward-word ()
(interactive)
(if (looking-at perl-movement-stop-pattern)
(progn
(if (re-search-forward non-perl-movement-stop-pattern nil t)
(backward-char)))
(if (re-search-forward perl-movement-stop-pattern nil t)
(backward-char))))

(defun perl-backward-word ()
(interactive)
(backward-char)
(if (looking-at perl-movement-stop-pattern)
(progn
(if (re-search-backward non-perl-movement-stop-pattern nil t)
(forward-char)))
(if (re-search-backward perl-movement-stop-pattern nil t)
(forward-char))))

(add-hook "cperl-mode-hook
(lambda()
(local-set-key [C-right] "perl-forward-word)
(local-set-key [C-left] "perl-backward-word)
linum-mode))

To robí to, čo chcem - skoro: stále sa musím zaobchádzať s prípadom pri pohybe späť z vnútra prvého slova v vyrovnávacej pamäti. Ale to nie je moja otázka.

Problém s tým je, že výber jesa nespustil, keď zadávam C-S-pravé, ako keď nie je nainštalovaný môj háčik (alebo v iných režimoch). Ak iniciujem výber (napríklad tým, že zasiahnem prvý S-pravý), moje funkcie to rozširujú.

Viem veľmi, veľmi málo o programe elisp a len tuším moju cestu tu. Chcela by som si trochu pomôcť. Vďaka...

odpovede:

2 pre odpoveď č. 1

Získať shift-select-mode pracovné, budete musieť použiť (interactive "^"), vyskúšať C-h f interactive RET.

BTW, môžete výrazne zjednodušiť svoj kód: posun vpred, jednoducho (re-search-forward ".\(\_<\|\_>\)" nil t) a pohybovať sa dozadu, použite (re-search-backward "\(\_<\|\_>\)." nil t).


1 pre odpoveď č. 2

Neviem presne to, čo chcete, ale myslel som si, že to budem ponúkať. Mám balík, ktorý volám syntax-podslovní (k dispozícii v spoločnosti Melpa). To robí slovné hnutie jemnejšou, až do tej miery, v ktorej sa takmer nikdy nepohybujem znakmi, a na iné vzdialenosti, ako je napr.

Z komentárov:

;; This package provides `syntax-subword" minor mode, which extends
;; `subword-mode" to make word editing and motion more fine-grained.
;; Basically, it makes syntax changes, CamelCaseWords, and the normal
;; word boundaries the boundaries for word operations.  Here"s an
;; example of where the cursor stops using `forward-word" in
;; `emacs-lisp-mode":
;;
;; (defun FooBar (arg) "doc string"
;; |     |      |    |     |      |  standard
;; |     |   |  |    |     |      |  subword-mode
;; ||    ||  |  |||  ||||  ||     || syntax-subword-mode
;; ||     |      ||  | ||   |     |  vim

Súvisiace otázky


Komentáre (0)

Pridať komentár