在Emacs viper-mode中插入空格而不是TAB

时间:2009-07-07 19:30:38

标签: configuration emacs elisp spaces viper-mode

我很长时间用户,并且最近发现emacs具有viper模式,提供两全其美(至少对我而言)。然而有一件事真的困扰我,因为我主要是在python编码,并且标签和空格的混合是一个大问题。

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

我没有在viper模式设置中找到任何可以执行此操作的内容。

修改

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

2 个答案:

答案 0 :(得分:6)

首先,您应确保'indent-tabs-mode的默认值为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级。

答案 1 :(得分:0)

也许是indent-tabs-mode?

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

在viper模式下尝试执行M-x apropos,然后搜索空格或制表符或缩进。