Подтвердить что ты не робот

Подчеркивание как часть слова для форвардного слова, не работающего

Я пытаюсь сделать, чтобы подчеркивания обрабатывались как часть слова для функции forward/backward-word, как описано здесь и здесь. Я специально пытаюсь заставить это работать в режиме nxhtml, но мне бы очень хотелось, чтобы он работал так для всех режимов.

Я изменил файл site-start.el несколькими способами, но безрезультатно. Но если я вручную выполняю команду M-x modify-syntax-table в буфере, она работает просто отлично. Я просто не могу заставить это быть по умолчанию.

Вот что я пытался вставить в мой site-start.el файл:

;; 1
;; thought  this would apply it to all modes - no error, but did not work
(modify-syntax-entry ?_ "w") 

;; 2
;; thought this would automatically set it on a mode change - no error, but did not work
(defun change-major-mode-hook ()
(modify-syntax-entry ?_ "w"))


;; 3
;; thought  this would apply it to all modes - no error, but did not work
(modify-syntax-entry ?_ "w")

;; 4
;; this produced a symbol value as variable is void error
(modify-syntax-entry ?_ "w" nxhtml-mode-syntax-table)

Что мне не хватает?

4b9b3361

Ответ 1

Вы пытались напрямую изменить nxhtml-mode-hook? Например:

(add-hook 'nxhtml-mode-hook
          (lambda () (modify-syntax-entry ?_ "w")))

Ответ 2

Трей ответил на ваш конкретный вопрос.

Но Emacs уже имеет уровень организации персонажа, который делает то, что вы просите: sexp. Если вы выучили команды sexp вместо того, чтобы сломать команды слов, тогда вы можете удалить "слово" или "символ" по мере того, как ситуация подходит.

Ответ 3

Как event_jr, я рекомендую вам научиться использовать команды на основе sexp, такие как C-M-f и C-M-b. Но если вы действительно хотите только перепрыгнуть через идентификаторы (и игнорировать такие вещи, как круглые скобки), вместо этого попробуйте и измените все синтаксические таблицы во всех основных режимах (что может привести к непредвиденным последствиям), я рекомендую вам просто использовать новые основанные на символах команды перемещения. Например. (global-set-key [remap forward-word] 'forward-symbol). Для некоторых команд (например, kill-word) вам нужно написать kill-symbol самостоятельно, но это должно быть легко сделать.

Ответ 4

Вместо добавления перехватов для каждого основного режима, как это предлагает Трей Джексон, вы можете изменить стандартную таблицу синтаксиса. Различные режимы наследуются от стандартной таблицы синтаксиса, поэтому ваша модификация, мы надеемся, применима ко всем режимам:

(modify-syntax-entry ?_ "w" (standard-syntax-table))

Это повлияет на обычный текст, XML, Python и другие.

Некоторые режимы более упрямы, а изменение стандартной таблицы синтаксиса не повлияет на них, поскольку они переопределяют некоторые символы во время инициализации. Одним из примеров является cc-mode. Вам все равно придется явно изменять свои таблицы.