修改emacs的forward-word/backward-word行为(使其类似于vi/vim)

10

如何在其他编辑器中实现vim中单词前后移动的快捷键呢?在vim中按"w"可以使光标向前移动一个单词,其中单词由字母、数字、下划线组成,或由其他非空白字符(包括空格、制表符、行尾)分隔而成。然而在emacs中,它会跳到下一个单词的结尾,而单词的定义取决于语法表中的模式。

例如,在以下示例中,将光标放在行首并执行forward-word("w")操作时,vim中光标所在的位置如下:

opt1.arg = opt2.arg
^   ^^   ^ ^   ^^  ^

在 Emacs 中是这样的:

opt1.arg = opt2.arg
^   ^   ^      ^   ^

实际上这取决于个人偏好,但我更喜欢vim风格,我想知道如何在emacs中实现相同的效果。我猜不止我一个人从vim转到emacs,所以也许有人已经有解决方案了,最好能包括kill-wordbackward-kill-word :)

我知道你可以通过组合M-fM-b等来获得类似的效果,但那不是重点。我也不想开始讨论哪种方法更好 - 这个主题已经在这里得到了很好的讨论。

3个回答

6
您可以实际使用'viper-forward-word
(require 'viper)
(global-set-key (kbd "M-f") 'viper-forward-word)
(global-set-key (kbd "M-b") 'viper-backward-word)

由于某些原因,我不得不使用大写版本才能使其正常工作:(require 'viper) (global-set-key (kbd "M-f") 'viper-forward-Word) (global-set-key (kbd "M-b") 'viper-backward-Word) - Glen
1
(require 'viper) 对我来说不起作用,我需要(require 'viper-cmd),这很奇怪,因为viper.el需要viper-cmd。我正在使用24.2.1版本。 - jpkotta
遇到了与jpkotta相同的问题。使用(require 'viper-cmd)。我在emacs 24.3.1上。 - mawaldne

1

这基本上是this的一个副本,该链接内容如下:

(require 'misc)

然后绑定任何你想要的键到forward-to-wordbackward-to-word。对于删除,创建一些简单的函数来包装这些函数并执行删除操作。


1
我之前看到了另一个帖子,但正如您所看到的,我正在询问另一件事(与同一主题相关),因此您的答案对此无益。 - fikovnik
forward-to-word分配给C-right很好,但是C-S-right不再选择文本 :-( - Malvineous

0

我不知道为什么jpkotta的回答被删除了,但是这里是它:

我有一个小模式,可以将基于单词的命令更改为在语法更改(以及CamelCaseSubwords)上操作。对于某些人来说,它可能过于细粒度,但我发现我基本上不再使用单个字符移动。

https://bitbucket.org/jpkotta/syntax-subword

@ mods,我不知道为什么这个答案会被删除,所以如果您选择删除这个答案,我希望能得到解释。


它并没有被删除,而是在另一个问题下。https://dev59.com/8nI-5IYBdhLWcg3wm5lH#13569228 - Ameen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接