关于Emacs中向前和向后的单词行为

问题描述 投票:9回答:6

我不知道我的设置是否有问题,但是当我按M-f(输入一个单词)时不管我在哪里,都永远不会将光标放在下一个单词中(仅在单词之间)。 M-b不会发生这种情况,M-b会将我的光标放在前一个单词的开头。

这是正常行为吗?如何将光标放在下一个单词的开头?

emacs command
6个回答
7
投票

确定,我们很清楚,我要假设您正在谈论的是命令forward-wordbackward-word,这些命令默认情况下绑定为Alt + fAlt + b

例如字符串:“你好,多莉,我在这里”

如果您的光标位于“ Hello”的“ H”上,并且您执行了[[forward-word,则光标将移至“ Hello”和“ dolly”之间的空格,但这听起来像您想要的光标在“ dolly”的字母“ d”上而不是前面。

因此,执行两次前向单词,然后执行一次后向单词。

将光标移到“ dolly”的“ d”上。

这可以通过宏自动执行。

;; =注释,请勿输入注释

Ctrl + x ;;开始宏

Alt

+ f Alt + f Alt + b

Ctrl

+ x ;;结束宏然后运行最后定义的宏,执行此操作:

Ctrl

+ x e编辑:正如评论中提到的帕斯卡,也可以使用]完成此操作>

Alt

+ f Ctrl + f
您也可以将其放入宏,无论哪种方式,结果都相同。

10
投票
所描述的宏解决方案是在会话中获得此行为的好方法,但是如果这是您想要的默认行为,则会带来一些不便,因为每次启动emacs时都必须对其进行定义。如果希望M-f一直这样工作,则可以定义一个elisp函数并将其绑定到键。将其放在您的.emacs文件中:

4
投票
这是正确的行为。根据Emacs manual,“ [f]向前移动在单词的最后一个字母之后立即停止,而向后移动在第一个字母之前立即停止。”

4
投票
除非向前或向后移动两次,除非您位于一行的开头,并且前面有空格。然后前进两次并返回一次,将使您移至下一个单词而不是第一个单词。下面的代码将完美地模仿vi的“ w”命令。我写得很快,因此可以进一步清理此代码。

0
投票
尝试以下操作:

0
投票
您可以通过使用在forward-to-word中找到的backward-to-wordmisc.el来实现此行为。我将这些绑定到Meta-F/Meta-B(即按住Shift键)。这些等效于Meta-f/Meta-bforward-word/backward-word
© www.soinside.com 2019 - 2024. All rights reserved.