W Emacsie istnieje wiele poleceń, które dotyczą „słów”. Przykłady obejmują forward-word
, kill-word
, upcase-word
, mark-word
, transpose-words
, itd. Określenie „słowo” wydaje się różnią się nieco między poleceniami. Na przykład forward-word
zatrzyma się na podkreślenie w środku słowa (np. foo_bar
), Ale mark-word
nie zatrzyma się na podkreślenie.
Czy można zmienić definicję „słowa”, gdy jestem w trybie progresywnym, aby Emacs używał odpowiednich granic słów dla składni bieżącego języka?
Kiedy jestem w c-mode
środku, chcę forward-word
pomijać podkreślenia, a kiedy jestem w lisp-mode
środku, chcę forward-word
pomijać zarówno myślniki, jak i podkreślenia itp.
źródło
C-M-f
jest związanyforward-sexp
i nie zachowuje się tak, jak to opisujesz. Masz rację, że chcę nawigować za pomocą symboli, ale nie widzę tej opcji.forward sexp
jest w zasadzie przezforward-symbol
większość czasu, z dodatkową wszechstronnością przekraczania pasujących nawiasów klamrowych. Powinieneś dać temu szansę.forward-sexp
jest to przybliżone przybliżenieforward-symbol
. Na początek może myląco przeskoczyć przez całe funkcje, lądując setki linii od miejsca, w którym zacząłeś. Przeskakuje także przez listy argumentów itp. I spróbuj tego: biorąc pod uwagę następujący kod lisp,(global-set-key [remap list-buffers] 'ibuffer)
umieść kursor w środku słowaremap
i uruchomforward-sexp
kilka razy. To podnosi błąd , gdy dochodzi do zamknięcia]
. Nie, dziękuję.superword-mode
może to być twój facet.C-M-f
iC-M-t
działać na symbolach (działają one na sexps). Będę edytować, aby poprawić to wrażenie. Ale z pewnością możesz przypisaćforward-symbol
dowolny klucz, który ci się spodoba, jeśli okaże się to szczególnie przydatne. Nie matranspose-symbols
, ale możesz napisać jeszcze raz, jeśli uważasz, że jest to przydatne.Spójrz na
superword-mode
isubword-mode
. Superword traktuje podkreślenia jako część słowa zamiast granicy, więcfoo_bar
byłby traktowany jako pojedyncze słowo .Subword robi odwrotnie, ale dla camelCase, dlatego
fooBar
jest traktowany jak dwa słowa zamiast jednego.Brzmi jak zachowanie, którego chcesz
cc-mode
użyćsuperword-mode
.Polecam lekturę nad źródłem
subword-mode
, ponieważ nawet jeśli te dwa tryby nie działają dokładnie tak, jak chcesz, powinny one pokazać, jak zmienić zachowanie wykrywania słów.Dłuższa dyskusja na temat emacsredux i ergomacs .
źródło
superword-mode
zabawęparedit
? Na przykładparedit-forward-kill-word
nie usuwa całego słowa (zawierającego podkreślenia), gdysuperword-mode
jest włączony.paredit
szanuje to, więc myślę, że robi to, o co go poproszono.paredit-forward-kill-word
nie zabija tego samego słowa zdefiniowanego przezsuperword-mode
.paredit-forward-kill-word
to i wygląda na to, że robi własną analizę. Być może uda się to zamienić, ale prawdopodobnie nie.Jeśli zrozumiałem twoje pytanie, możesz zmodyfikować tabelę składni języka, np. Dla c ++:
(modify-syntax-entry ?_ "w" c++-mode-syntax-table)
M-x apropos
to poszukaj tabeli składni również powinno ci pomóc.źródło