【问题标题】:Insert spaces instead of TAB in Emacs viper-mode在 Emacs viper 模式中插入空格而不是 TAB
【发布时间】:2010-11-08 19:44:46
【问题描述】:

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

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

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

编辑:

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

【问题讨论】:

    标签: configuration emacs elisp spaces viper-mode


    【解决方案1】:

    可能是缩进制表模式?

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

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

    【讨论】:

      【解决方案2】:

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

      (setq-default indent-tabs-mode nil)
      

      那么,在viper-mode,也取决于你的viper-expert-level。在级别 1 或 2,TAB 似乎通过模式映射 viper-insert-diehard-minor-mode 绑定到 'self-insert-command(当专家级别为 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 级也是如此。

      【讨论】:

        猜你喜欢
        • 2011-07-06
        • 1970-01-01
        • 1970-01-01
        • 2014-07-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-01
        • 1970-01-01
        相关资源
        最近更新 更多