在 Emacs viper 模式下插入空格而不是 TAB
我是 vim 的长期用户,最近发现 emacs 有 viper 模式,提供了两全其美的功能(至少对我来说)。 然而,有一件事确实困扰着我,因为我主要用 python 编码,制表符和空格的混合是一件大事。
在插入模式下,我想在按 TAB 时插入 viper-shift-width 空格而不是 TAB。 我怎样才能做到这一点? 我想一些简单的 lisp 函数/设置就是解决方案。
我在 viper 模式设置中没有找到任何可以做到这一点的东西。
编辑:
我的 .emacs 中有 (setq-default indent-tabs-mode nil)
但当我处于插入模式时这不起作用(在 vim 中是指插入模式)在 viper 模式下
I am long time-vim user and recently discovered that emacs has viper-mode, offering best of both worlds (at least for me). However one thing is really bothering me since I am mostly coding in python and mixing of tabs and spaces is a big deal.
When in insert mode I would like to insert viper-shift-width spaces instead of TAB when I press TAB. How can I do this? I suppose some simple lisp function/setting is the solution.
I didn't find anything in viper-mode settings that could do this.
Edit:
I have (setq-default indent-tabs-mode nil)
in my .emacs but this doesn't work when I am in insert mode (in vim meaing of insert mode) in viper-mode
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
首先,您应该确保
'indent-tabs-mode
的默认值为nil
,如下所示:然后,在
viper-mode
中,它还取决于您的viper专家级别
。 在级别 1 或 2,TAB
似乎通过模式映射viper-insert-diehard-minor-mode
绑定到'self-insert-command
code>(专家级别为 1 或 2 时启用)。 我猜想它试图提供最大的 vi 兼容性,这意味着您牺牲了一些 Emacs 功能,包括使用一些非常基本的自定义功能。所以...您可以将专家级别提高到 3 或更高:
如果您确实想要级别 1 或 2,但希望 TAB 不是自插入命令,则将其添加到您的 .viper 文件中:
这对我来说很有效,即使在 1 级。
First, you should ensure the default value of
'indent-tabs-mode
isnil
, like so:Then, in
viper-mode
, it also depends on yourviper-expert-level
. At level 1 or 2,TAB
appears to be bound to'self-insert-command
via the mode mapviper-insert-diehard-minor-mode
(which is enabled when the expert level is either 1 or 2). I guess that it is trying to provide maximal vi compatibility, which means you sacrifice some Emacs features, including the use of some pretty basic customizations.So... you can up your expert level to 3 or higher:
If you really want level 1 or 2, but want TAB to not be a self inserting command, then add this to your .viper file:
That does the trick for me, even on level 1.
也许是缩进制表符模式?
如果将其设置为零或取消设置会发生什么?
进入 viper 模式后,尝试执行 Mx apropos,然后搜索空格、制表符或缩进。
indent-tabs-mode perhaps?
What happens if you set it to nil, or unset it?
After you're in viper mode try doing M-x apropos and then search for space or tab or indent.