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

Sta*_*tan 3 emacs configuration elisp spaces viper-mode

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

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

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

编辑:

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

Tre*_*son 6

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

(setq-default indent-tabs-mode nil)
Run Code Online (Sandbox Code Playgroud)

然后,在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?
Run Code Online (Sandbox Code Playgroud)

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

(define-key viper-insert-diehard-map (kbd "TAB") 'viper-insert-tab)
Run Code Online (Sandbox Code Playgroud)

这对我来说很有用,即使是在第1级.