3

我是 vim 的长期用户,最近发现 emacs 有 viper 模式,提供两全其美(至少对我而言)。然而有一件事真的让我很困扰,因为我主要是在 python 中编码,并且混合制表符和空格是一件大事。

在插入模式下,我想在按 TAB 时插入 viper-shift-width 空格而不是 TAB。我怎样才能做到这一点?我想一些简单的 lisp 函数/设置是解决方案。

我在毒蛇模式设置中没有找到任何可以做到这一点的东西。

编辑:

(setq-default indent-tabs-mode nil)在我的 .emacs 中,但是当我在 viper 模式下处于插入模式(在插入模式的 vim 中)时,这不起作用

4

2 回答 2

6

'indent-tabs-mode首先,您应该确保is的默认值nil,如下所示:

(setq-default indent-tabs-mode nil)

然后,在 中viper-mode,它还取决于您的viper-expert-level. 在级别 1 或 2,TAB似乎'self-insert-command通过模式映射绑定viper-insert-diehard-minor-mode(当专家级别为 1 或 2 时启用)。我猜它试图提供最大的 vi 兼容性,这意味着你牺牲了一些 Emacs 功能,包括使用一些非常基本的自定义。

所以...您可以将您的专家级别提高到 3 级或更高:

(setq viper-expert-level 5)        ; really, why use anything less?

如果您确实想要级别 1 或 2,但希望 TAB 不是自插入命令,则将其添加到您的 .viper 文件中:

(define-key viper-insert-diehard-map (kbd "TAB") 'viper-insert-tab)

这对我有用,即使在 1 级。

于 2009-07-07T19:50:34.983 回答
0

缩进标签模式也许?

如果将其设置为 nil 或取消设置会发生什么?

进入 viper 模式后,尝试执行 Mx apropos,然后搜索空格、制表符或缩进。

于 2009-07-07T19:39:28.783 回答