在 Emacs viper 模式下插入空格而不是 TAB

发布于 2024-07-26 03:51:04 字数 396 浏览 8 评论 0原文

我是 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

辞别 2024-08-02 03:51:04

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

(setq-default indent-tabs-mode nil)

然后,在viper-mode中,它还取决于您的viper专家级别。 在级别 1 或 2,TAB 似乎通过模式映射 viper-insert-diehard-minor-mode 绑定到 'self-insert-command code>(专家级别为 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 级。

First, you should ensure the default value of 'indent-tabs-mode is nil, like so:

(setq-default indent-tabs-mode nil)

Then, in viper-mode, it also depends on your viper-expert-level. At level 1 or 2, TAB appears to be bound to 'self-insert-command via the mode map viper-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:

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

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:

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

That does the trick for me, even on level 1.

记忆消瘦 2024-08-02 03:51:04

也许是缩进制表符模式?

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

进入 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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文