我不知道我的设置是否有问题,但是当我按下M-f(转发一个单词)时 无论我在哪里,它都不会将光标放在下一个单词中(只在单词之间)。使用M-b时不会发生这种情况,将光标放在上一个单词的开头。
这是正常行为吗?如何将光标放在下一个单词的开头?
答案 0 :(得分:9)
描述的宏解决方案是在会话中获得此行为的好方法,但如果这是您想要的默认行为,则有点不方便,因为每次启动emacs时都必须定义它。如果你希望M-f一直这样工作,你可以定义一个elisp函数并将其绑定到密钥。把它放在.emacs文件中:
(defun next-word (p)
"Move point to the beginning of the next word, past any spaces"
(interactive "d")
(forward-word)
(forward-word)
(backward-word))
(global-set-key "\M-f" 'next-word)
答案 1 :(得分:7)
好的,我们很清楚,我会假设您正在谈论命令前向词和后向词这些命令默认绑定到< kbd> Alt + f 和 Alt + b
例如string:“Hello dolly我在这里”
如果您的光标位于“Hello”的“H”,并且您执行前向词,则光标将移动到“Hello”和“dolly”之间的空格,但听起来像你希望光标位于“dolly”的字母“d”而不是它前面。
所以,做两次前向词,然后做一次后向词。
这会将你的光标放在“dolly”的“d”上。
这可以通过宏自动完成。
;; =评论,不要输入
Ctrl + x ( ;; start macro
Alt + f Alt + f Alt + b
Ctrl + x ) ;;结束宏
然后运行最后定义的宏执行此操作:
Ctrl + x e
编辑:正如评论中提到的pascal,这也可以用
完成Alt + f Ctrl + f
您也可以将其放入宏中,无论哪种方式结果相同。
答案 2 :(得分:4)
这是正确的行为。根据{{3}},“[f]向前运动在单词的最后一个字母后面停止,而向后运动在第一个字母之前停止。”
为什么会这样?也许与杀词(M-d)保持一致。
答案 3 :(得分:4)
向前移动两次并向前移动一次是正常的,除非你在前面有空格的线的开头。然后前进两次并返回一次将使您转到下一个单词而不是第一个单词。下面的代码将完美地模仿vi的“w”命令。我写得很快,所以可以进一步清理这段代码。
(defun forward-word-to-beginning (&optional n)
"Move point forward n words and place cursor at the beginning."
(interactive "p")
(let (myword)
(setq myword
(if (and transient-mark-mode mark-active)
(buffer-substring-no-properties (region-beginning) (region-end))
(thing-at-point 'symbol)))
(if (not (eq myword nil))
(forward-word n))
(forward-word n)
(backward-word n)))
(global-set-key (kbd "M-C-f") 'forward-word-to-beginning)
答案 4 :(得分:0)
尝试以下内容:
;; replace common word-operations on same-syntax-operations
(require 'thingatpt)
(global-set-key "\M-f" 'forward-same-syntax)
(global-set-key "\M-b" (lambda()
(interactive)
(forward-same-syntax -1)))
(defun kill-syntax (&optional arg)
"Kill ARG sets of syntax characters after point."
(interactive "p")
(let ((opoint (point)))
(forward-same-syntax arg)
(kill-region opoint (point))))
(global-set-key "\M-d" 'kill-syntax)
(global-set-key [(meta backspace)] (lambda()
(interactive)
(kill-syntax -1)))
答案 5 :(得分:0)
您可以通过使用forward-to-word
中的backward-to-word
和misc.el
来实现此行为。我将这些绑定到Meta-F/Meta-B
(即按住Shift键)。这些等效于Meta-f/Meta-b
forward-word/backward-word
我的.emacs具有以下绑定
(global-set-key (kbd "M-F") #'forward-to-word)
(global-set-key (kbd "M-B") #'backward-to-word)