如何改变emacs移动单词的方式?

时间:2016-01-15 07:49:55

标签: emacs

我是一名初级emacser。我想知道如何改变·emacs·识别单词的方式。

例如,我在行尾:(font-spec :family "Microsoft YaHei" :size 13))),现在M-b向后移动一个单词:

(使用符号|标记插入符号位置)

emacs的: (font-spec :family "Microsoft YaHei" :size |13)))
升华: (font-spec :family "Microsoft YaHei" :size 13|)))

M-b agian

emacs的: (font-spec :family "Microsoft YaHei" :|size 13)))
升华: (font-spec :family "Microsoft YaHei" :size |13)))

M-b几次

emacs的: (font-spec :family "Microsoft YaHei" |:size 13)))
升华: (font-spec :family "Microsoft YaHei" |:size 13)))

M-b agian

emacs的: (font-spec :family "Microsoft |YaHei" :size 13)))
升华: (font-spec :family "Microsoft YaHei|" :size 13)))

M-b几次

emacs的: (font-spec :|family "Microsoft YaHei" :size 13)))
升华: (font-spec :|family "Microsoft YaHei" :size 13)))

M-b agian

emacs的: (font-|spec :family "Microsoft YaHei" :size 13)))
升华: (font-spec |:family "Microsoft YaHei" :size 13)))

移动emacs的单词的方式太过不适应它。我更喜欢sublime的方式。我想知道如何改变emacs在word.thx上移动的方式

1 个答案:

答案 0 :(得分:2)

Emacs使用语法表,每个字符都属于指定的语法类。语法表可能因缓冲区而异,通常根据使用的主要模式的要求而定。

参见 C-h i g (elisp) Syntax Tables RET

forward-wordbackward-word找到“word”语法的下一个/上一个字符,然后跳过所有后续连续的“word”语法字符。

我不知道Sublime正在使用什么规则,并且无法从您的示例中确定这些规则,但也许这样的事情会更符合您的喜好?

(defun my-backward-word-or-other ()
  "Move over the preceding word or non-word characters."
  (interactive)
  (unless (bobp)
    (if (eq ?w (char-syntax (char-before)))
        (backward-word)
      (skip-syntax-backward "^w"))))

(defun my-forward-word-or-other ()
  "Move over the following word or non-word characters."
  (interactive)
  (unless (eobp)
    (if (eq ?w (char-syntax (char-after)))
        (forward-word)
      (skip-syntax-forward "^w"))))

(global-set-key [remap forward-word] 'my-forward-word-or-other)
(global-set-key [remap backward-word] 'my-backward-word-or-other)